mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
style: Run pre-commit
This commit is contained in:
parent
b47882b114
commit
9c6c13b78a
235 changed files with 7180 additions and 5628 deletions
|
@ -13,12 +13,16 @@ class AcceptedTerm(Base):
|
|||
__mapper_args__ = {"primary_key": [__table__.c.TermsID]}
|
||||
|
||||
User = relationship(
|
||||
_User, backref=backref("accepted_terms", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
_User,
|
||||
backref=backref("accepted_terms", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UsersID],
|
||||
)
|
||||
|
||||
Term = relationship(
|
||||
_Term, backref=backref("accepted_terms", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.TermsID])
|
||||
_Term,
|
||||
backref=backref("accepted_terms", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.TermsID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -27,10 +31,12 @@ class AcceptedTerm(Base):
|
|||
raise IntegrityError(
|
||||
statement="Foreign key UsersID cannot be null.",
|
||||
orig="AcceptedTerms.UserID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.Term and not self.TermsID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key TermID cannot be null.",
|
||||
orig="AcceptedTerms.TermID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -16,7 +16,7 @@ ACCOUNT_TYPE_ID = {
|
|||
USER: USER_ID,
|
||||
TRUSTED_USER: TRUSTED_USER_ID,
|
||||
DEVELOPER: DEVELOPER_ID,
|
||||
TRUSTED_USER_AND_DEV: TRUSTED_USER_AND_DEV_ID
|
||||
TRUSTED_USER_AND_DEV: TRUSTED_USER_AND_DEV_ID,
|
||||
}
|
||||
|
||||
# Reversed ACCOUNT_TYPE_ID mapping.
|
||||
|
@ -24,7 +24,8 @@ ACCOUNT_TYPE_NAME = {v: k for k, v in ACCOUNT_TYPE_ID.items()}
|
|||
|
||||
|
||||
class AccountType(Base):
|
||||
""" An ORM model of a single AccountTypes record. """
|
||||
"""An ORM model of a single AccountTypes record."""
|
||||
|
||||
__table__ = schema.AccountTypes
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
@ -36,5 +37,4 @@ class AccountType(Base):
|
|||
return str(self.AccountType)
|
||||
|
||||
def __repr__(self):
|
||||
return "<AccountType(ID='%s', AccountType='%s')>" % (
|
||||
self.ID, str(self))
|
||||
return "<AccountType(ID='%s', AccountType='%s')>" % (self.ID, str(self))
|
||||
|
|
|
@ -16,10 +16,12 @@ class ApiRateLimit(Base):
|
|||
raise IntegrityError(
|
||||
statement="Column Requests cannot be null.",
|
||||
orig="ApiRateLimit.Requests",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if self.WindowStart is None:
|
||||
raise IntegrityError(
|
||||
statement="Column WindowStart cannot be null.",
|
||||
orig="ApiRateLimit.WindowStart",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -6,26 +6,19 @@ from aurweb import util
|
|||
|
||||
|
||||
def to_dict(model):
|
||||
return {
|
||||
c.name: getattr(model, c.name)
|
||||
for c in model.__table__.columns
|
||||
}
|
||||
return {c.name: getattr(model, c.name) for c in model.__table__.columns}
|
||||
|
||||
|
||||
def to_json(model, indent: int = None):
|
||||
return json.dumps({
|
||||
k: util.jsonify(v)
|
||||
for k, v in to_dict(model).items()
|
||||
}, indent=indent)
|
||||
return json.dumps(
|
||||
{k: util.jsonify(v) for k, v in to_dict(model).items()}, indent=indent
|
||||
)
|
||||
|
||||
|
||||
Base = declarative_base()
|
||||
|
||||
# Setup __table_args__ applicable to every table.
|
||||
Base.__table_args__ = {
|
||||
"autoload": False,
|
||||
"extend_existing": True
|
||||
}
|
||||
Base.__table_args__ = {"autoload": False, "extend_existing": True}
|
||||
|
||||
# Setup Base.as_dict and Base.json.
|
||||
#
|
||||
|
|
|
@ -15,4 +15,5 @@ class Group(Base):
|
|||
raise IntegrityError(
|
||||
statement="Column Name cannot be null.",
|
||||
orig="Groups.Name",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -16,4 +16,5 @@ class License(Base):
|
|||
raise IntegrityError(
|
||||
statement="Column Name cannot be null.",
|
||||
orig="Licenses.Name",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -21,16 +21,19 @@ class OfficialProvider(Base):
|
|||
raise IntegrityError(
|
||||
statement="Column Name cannot be null.",
|
||||
orig="OfficialProviders.Name",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.Repo:
|
||||
raise IntegrityError(
|
||||
statement="Column Repo cannot be null.",
|
||||
orig="OfficialProviders.Repo",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.Provides:
|
||||
raise IntegrityError(
|
||||
statement="Column Provides cannot be null.",
|
||||
orig="OfficialProviders.Provides",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -12,9 +12,10 @@ class Package(Base):
|
|||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("packages", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
_PackageBase,
|
||||
backref=backref("packages", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID],
|
||||
)
|
||||
|
||||
# No Package instances are official packages.
|
||||
is_official = False
|
||||
|
@ -26,10 +27,12 @@ class Package(Base):
|
|||
raise IntegrityError(
|
||||
statement="Foreign key PackageBaseID cannot be null.",
|
||||
orig="Packages.PackageBaseID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if self.Name is None:
|
||||
raise IntegrityError(
|
||||
statement="Column Name cannot be null.",
|
||||
orig="Packages.Name",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -12,20 +12,28 @@ class PackageBase(Base):
|
|||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
Flagger = relationship(
|
||||
_User, backref=backref("flagged_bases", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.FlaggerUID])
|
||||
_User,
|
||||
backref=backref("flagged_bases", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.FlaggerUID],
|
||||
)
|
||||
|
||||
Submitter = relationship(
|
||||
_User, backref=backref("submitted_bases", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.SubmitterUID])
|
||||
_User,
|
||||
backref=backref("submitted_bases", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.SubmitterUID],
|
||||
)
|
||||
|
||||
Maintainer = relationship(
|
||||
_User, backref=backref("maintained_bases", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.MaintainerUID])
|
||||
_User,
|
||||
backref=backref("maintained_bases", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.MaintainerUID],
|
||||
)
|
||||
|
||||
Packager = relationship(
|
||||
_User, backref=backref("package_bases", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.PackagerUID])
|
||||
_User,
|
||||
backref=backref("package_bases", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.PackagerUID],
|
||||
)
|
||||
|
||||
# A set used to check for floatable values.
|
||||
TO_FLOAT = {"Popularity"}
|
||||
|
@ -37,7 +45,8 @@ class PackageBase(Base):
|
|||
raise IntegrityError(
|
||||
statement="Column Name cannot be null.",
|
||||
orig="PackageBases.Name",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
# If no SubmittedTS/ModifiedTS is provided on creation, set them
|
||||
# here to the current utc timestamp.
|
||||
|
|
|
@ -16,4 +16,5 @@ class PackageBlacklist(Base):
|
|||
raise IntegrityError(
|
||||
statement="Column Name cannot be null.",
|
||||
orig="PackageBlacklist.Name",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -10,19 +10,19 @@ from aurweb.models.user import User as _User
|
|||
class PackageComaintainer(Base):
|
||||
__table__ = schema.PackageComaintainers
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.UsersID, __table__.c.PackageBaseID]
|
||||
}
|
||||
__mapper_args__ = {"primary_key": [__table__.c.UsersID, __table__.c.PackageBaseID]}
|
||||
|
||||
User = relationship(
|
||||
_User, backref=backref("comaintained", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
_User,
|
||||
backref=backref("comaintained", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.UsersID],
|
||||
)
|
||||
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("comaintainers", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
_PackageBase,
|
||||
backref=backref("comaintainers", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -31,16 +31,19 @@ class PackageComaintainer(Base):
|
|||
raise IntegrityError(
|
||||
statement="Foreign key UsersID cannot be null.",
|
||||
orig="PackageComaintainers.UsersID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.PackageBase and not self.PackageBaseID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key PackageBaseID cannot be null.",
|
||||
orig="PackageComaintainers.PackageBaseID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.Priority:
|
||||
raise IntegrityError(
|
||||
statement="Column Priority cannot be null.",
|
||||
orig="PackageComaintainers.Priority",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -13,21 +13,28 @@ class PackageComment(Base):
|
|||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("comments", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
_PackageBase,
|
||||
backref=backref("comments", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID],
|
||||
)
|
||||
|
||||
User = relationship(
|
||||
_User, backref=backref("package_comments", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
_User,
|
||||
backref=backref("package_comments", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UsersID],
|
||||
)
|
||||
|
||||
Editor = relationship(
|
||||
_User, backref=backref("edited_comments", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.EditedUsersID])
|
||||
_User,
|
||||
backref=backref("edited_comments", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.EditedUsersID],
|
||||
)
|
||||
|
||||
Deleter = relationship(
|
||||
_User, backref=backref("deleted_comments", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.DelUsersID])
|
||||
_User,
|
||||
backref=backref("deleted_comments", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.DelUsersID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -36,27 +43,31 @@ class PackageComment(Base):
|
|||
raise IntegrityError(
|
||||
statement="Foreign key PackageBaseID cannot be null.",
|
||||
orig="PackageComments.PackageBaseID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.User and not self.UsersID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key UsersID cannot be null.",
|
||||
orig="PackageComments.UsersID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if self.Comments is None:
|
||||
raise IntegrityError(
|
||||
statement="Column Comments cannot be null.",
|
||||
orig="PackageComments.Comments",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if self.RenderedComment is None:
|
||||
self.RenderedComment = str()
|
||||
|
||||
def maintainers(self):
|
||||
return list(filter(
|
||||
lambda e: e is not None,
|
||||
[self.PackageBase.Maintainer] + [
|
||||
c.User for c in self.PackageBase.comaintainers
|
||||
]
|
||||
))
|
||||
return list(
|
||||
filter(
|
||||
lambda e: e is not None,
|
||||
[self.PackageBase.Maintainer]
|
||||
+ [c.User for c in self.PackageBase.comaintainers],
|
||||
)
|
||||
)
|
||||
|
|
|
@ -22,14 +22,16 @@ class PackageDependency(Base):
|
|||
}
|
||||
|
||||
Package = relationship(
|
||||
_Package, backref=backref("package_dependencies", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageID])
|
||||
_Package,
|
||||
backref=backref("package_dependencies", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageID],
|
||||
)
|
||||
|
||||
DependencyType = relationship(
|
||||
_DependencyType,
|
||||
backref=backref("package_dependencies", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.DepTypeID])
|
||||
foreign_keys=[__table__.c.DepTypeID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -38,43 +40,58 @@ class PackageDependency(Base):
|
|||
raise IntegrityError(
|
||||
statement="Foreign key PackageID cannot be null.",
|
||||
orig="PackageDependencies.PackageID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.DependencyType and not self.DepTypeID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key DepTypeID cannot be null.",
|
||||
orig="PackageDependencies.DepTypeID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if self.DepName is None:
|
||||
raise IntegrityError(
|
||||
statement="Column DepName cannot be null.",
|
||||
orig="PackageDependencies.DepName",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
def is_package(self) -> bool:
|
||||
pkg = db.query(_Package).filter(_Package.Name == self.DepName).exists()
|
||||
official = db.query(_OfficialProvider).filter(
|
||||
_OfficialProvider.Name == self.DepName).exists()
|
||||
official = (
|
||||
db.query(_OfficialProvider)
|
||||
.filter(_OfficialProvider.Name == self.DepName)
|
||||
.exists()
|
||||
)
|
||||
return db.query(pkg).scalar() or db.query(official).scalar()
|
||||
|
||||
def provides(self) -> list[PackageRelation]:
|
||||
from aurweb.models.relation_type import PROVIDES_ID
|
||||
|
||||
rels = db.query(PackageRelation).join(_Package).filter(
|
||||
and_(PackageRelation.RelTypeID == PROVIDES_ID,
|
||||
PackageRelation.RelName == self.DepName)
|
||||
).with_entities(
|
||||
_Package.Name,
|
||||
literal(False).label("is_official")
|
||||
).order_by(_Package.Name.asc())
|
||||
rels = (
|
||||
db.query(PackageRelation)
|
||||
.join(_Package)
|
||||
.filter(
|
||||
and_(
|
||||
PackageRelation.RelTypeID == PROVIDES_ID,
|
||||
PackageRelation.RelName == self.DepName,
|
||||
)
|
||||
)
|
||||
.with_entities(_Package.Name, literal(False).label("is_official"))
|
||||
.order_by(_Package.Name.asc())
|
||||
)
|
||||
|
||||
official_rels = db.query(_OfficialProvider).filter(
|
||||
and_(_OfficialProvider.Provides == self.DepName,
|
||||
_OfficialProvider.Name != self.DepName)
|
||||
).with_entities(
|
||||
_OfficialProvider.Name,
|
||||
literal(True).label("is_official")
|
||||
).order_by(_OfficialProvider.Name.asc())
|
||||
official_rels = (
|
||||
db.query(_OfficialProvider)
|
||||
.filter(
|
||||
and_(
|
||||
_OfficialProvider.Provides == self.DepName,
|
||||
_OfficialProvider.Name != self.DepName,
|
||||
)
|
||||
)
|
||||
.with_entities(_OfficialProvider.Name, literal(True).label("is_official"))
|
||||
.order_by(_OfficialProvider.Name.asc())
|
||||
)
|
||||
|
||||
return rels.union(official_rels).all()
|
||||
|
|
|
@ -10,19 +10,19 @@ from aurweb.models.package import Package as _Package
|
|||
class PackageGroup(Base):
|
||||
__table__ = schema.PackageGroups
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.PackageID, __table__.c.GroupID]
|
||||
}
|
||||
__mapper_args__ = {"primary_key": [__table__.c.PackageID, __table__.c.GroupID]}
|
||||
|
||||
Package = relationship(
|
||||
_Package, backref=backref("package_groups", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageID])
|
||||
_Package,
|
||||
backref=backref("package_groups", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageID],
|
||||
)
|
||||
|
||||
Group = relationship(
|
||||
_Group, backref=backref("package_groups", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.GroupID])
|
||||
_Group,
|
||||
backref=backref("package_groups", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.GroupID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -31,10 +31,12 @@ class PackageGroup(Base):
|
|||
raise IntegrityError(
|
||||
statement="Primary key PackageID cannot be null.",
|
||||
orig="PackageGroups.PackageID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.Group and not self.GroupID:
|
||||
raise IntegrityError(
|
||||
statement="Primary key GroupID cannot be null.",
|
||||
orig="PackageGroups.GroupID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -9,14 +9,13 @@ from aurweb.models.package_base import PackageBase as _PackageBase
|
|||
class PackageKeyword(Base):
|
||||
__table__ = schema.PackageKeywords
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.PackageBaseID, __table__.c.Keyword]
|
||||
}
|
||||
__mapper_args__ = {"primary_key": [__table__.c.PackageBaseID, __table__.c.Keyword]}
|
||||
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("keywords", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
_PackageBase,
|
||||
backref=backref("keywords", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -25,4 +24,5 @@ class PackageKeyword(Base):
|
|||
raise IntegrityError(
|
||||
statement="Primary key PackageBaseID cannot be null.",
|
||||
orig="PackageKeywords.PackageBaseID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -10,19 +10,19 @@ from aurweb.models.package import Package as _Package
|
|||
class PackageLicense(Base):
|
||||
__table__ = schema.PackageLicenses
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.PackageID, __table__.c.LicenseID]
|
||||
}
|
||||
__mapper_args__ = {"primary_key": [__table__.c.PackageID, __table__.c.LicenseID]}
|
||||
|
||||
Package = relationship(
|
||||
_Package, backref=backref("package_licenses", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageID])
|
||||
_Package,
|
||||
backref=backref("package_licenses", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageID],
|
||||
)
|
||||
|
||||
License = relationship(
|
||||
_License, backref=backref("package_licenses", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.LicenseID])
|
||||
_License,
|
||||
backref=backref("package_licenses", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.LicenseID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -31,10 +31,12 @@ class PackageLicense(Base):
|
|||
raise IntegrityError(
|
||||
statement="Primary key PackageID cannot be null.",
|
||||
orig="PackageLicenses.PackageID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.License and not self.LicenseID:
|
||||
raise IntegrityError(
|
||||
statement="Primary key LicenseID cannot be null.",
|
||||
orig="PackageLicenses.LicenseID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -10,20 +10,19 @@ from aurweb.models.user import User as _User
|
|||
class PackageNotification(Base):
|
||||
__table__ = schema.PackageNotifications
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.UserID, __table__.c.PackageBaseID]
|
||||
}
|
||||
__mapper_args__ = {"primary_key": [__table__.c.UserID, __table__.c.PackageBaseID]}
|
||||
|
||||
User = relationship(
|
||||
_User, backref=backref("notifications", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.UserID])
|
||||
_User,
|
||||
backref=backref("notifications", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.UserID],
|
||||
)
|
||||
|
||||
PackageBase = relationship(
|
||||
_PackageBase,
|
||||
backref=backref("notifications", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
backref=backref("notifications", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -32,10 +31,12 @@ class PackageNotification(Base):
|
|||
raise IntegrityError(
|
||||
statement="Foreign key UserID cannot be null.",
|
||||
orig="PackageNotifications.UserID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.PackageBase and not self.PackageBaseID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key PackageBaseID cannot be null.",
|
||||
orig="PackageNotifications.PackageBaseID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -19,13 +19,16 @@ class PackageRelation(Base):
|
|||
}
|
||||
|
||||
Package = relationship(
|
||||
_Package, backref=backref("package_relations", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageID])
|
||||
_Package,
|
||||
backref=backref("package_relations", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageID],
|
||||
)
|
||||
|
||||
RelationType = relationship(
|
||||
_RelationType, backref=backref("package_relations", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.RelTypeID])
|
||||
_RelationType,
|
||||
backref=backref("package_relations", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.RelTypeID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -34,16 +37,19 @@ class PackageRelation(Base):
|
|||
raise IntegrityError(
|
||||
statement="Foreign key PackageID cannot be null.",
|
||||
orig="PackageRelations.PackageID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.RelationType and not self.RelTypeID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key RelTypeID cannot be null.",
|
||||
orig="PackageRelations.RelTypeID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.RelName:
|
||||
raise IntegrityError(
|
||||
statement="Column RelName cannot be null.",
|
||||
orig="PackageRelations.RelName",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -25,26 +25,34 @@ class PackageRequest(Base):
|
|||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
RequestType = relationship(
|
||||
_RequestType, backref=backref("package_requests", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.ReqTypeID])
|
||||
_RequestType,
|
||||
backref=backref("package_requests", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.ReqTypeID],
|
||||
)
|
||||
|
||||
User = relationship(
|
||||
_User, backref=backref("package_requests", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
_User,
|
||||
backref=backref("package_requests", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UsersID],
|
||||
)
|
||||
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("requests", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
_PackageBase,
|
||||
backref=backref("requests", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.PackageBaseID],
|
||||
)
|
||||
|
||||
Closer = relationship(
|
||||
_User, backref=backref("closed_requests", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.ClosedUID])
|
||||
_User,
|
||||
backref=backref("closed_requests", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.ClosedUID],
|
||||
)
|
||||
|
||||
STATUS_DISPLAY = {
|
||||
PENDING_ID: PENDING,
|
||||
CLOSED_ID: CLOSED,
|
||||
ACCEPTED_ID: ACCEPTED,
|
||||
REJECTED_ID: REJECTED
|
||||
REJECTED_ID: REJECTED,
|
||||
}
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
|
@ -54,38 +62,44 @@ class PackageRequest(Base):
|
|||
raise IntegrityError(
|
||||
statement="Foreign key ReqTypeID cannot be null.",
|
||||
orig="PackageRequests.ReqTypeID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.PackageBase and not self.PackageBaseID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key PackageBaseID cannot be null.",
|
||||
orig="PackageRequests.PackageBaseID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.PackageBaseName:
|
||||
raise IntegrityError(
|
||||
statement="Column PackageBaseName cannot be null.",
|
||||
orig="PackageRequests.PackageBaseName",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.User and not self.UsersID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key UsersID cannot be null.",
|
||||
orig="PackageRequests.UsersID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if self.Comments is None:
|
||||
raise IntegrityError(
|
||||
statement="Column Comments cannot be null.",
|
||||
orig="PackageRequests.Comments",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if self.ClosureComment is None:
|
||||
raise IntegrityError(
|
||||
statement="Column ClosureComment cannot be null.",
|
||||
orig="PackageRequests.ClosureComment",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
def status_display(self) -> str:
|
||||
""" Return a display string for the Status column. """
|
||||
"""Return a display string for the Status column."""
|
||||
return self.STATUS_DISPLAY[self.Status]
|
||||
|
|
|
@ -9,17 +9,13 @@ from aurweb.models.package import Package as _Package
|
|||
class PackageSource(Base):
|
||||
__table__ = schema.PackageSources
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [
|
||||
__table__.c.PackageID,
|
||||
__table__.c.Source
|
||||
]
|
||||
}
|
||||
__mapper_args__ = {"primary_key": [__table__.c.PackageID, __table__.c.Source]}
|
||||
|
||||
Package = relationship(
|
||||
_Package, backref=backref("package_sources", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageID])
|
||||
_Package,
|
||||
backref=backref("package_sources", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -28,7 +24,8 @@ class PackageSource(Base):
|
|||
raise IntegrityError(
|
||||
statement="Foreign key PackageID cannot be null.",
|
||||
orig="PackageSources.PackageID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.Source:
|
||||
self.Source = "/dev/null"
|
||||
|
|
|
@ -10,18 +10,19 @@ from aurweb.models.user import User as _User
|
|||
class PackageVote(Base):
|
||||
__table__ = schema.PackageVotes
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.UsersID, __table__.c.PackageBaseID]
|
||||
}
|
||||
__mapper_args__ = {"primary_key": [__table__.c.UsersID, __table__.c.PackageBaseID]}
|
||||
|
||||
User = relationship(
|
||||
_User, backref=backref("package_votes", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
_User,
|
||||
backref=backref("package_votes", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UsersID],
|
||||
)
|
||||
|
||||
PackageBase = relationship(
|
||||
_PackageBase, backref=backref("package_votes", lazy="dynamic",
|
||||
cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID])
|
||||
_PackageBase,
|
||||
backref=backref("package_votes", lazy="dynamic", cascade="all, delete"),
|
||||
foreign_keys=[__table__.c.PackageBaseID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -30,16 +31,19 @@ class PackageVote(Base):
|
|||
raise IntegrityError(
|
||||
statement="Foreign key UsersID cannot be null.",
|
||||
orig="PackageVotes.UsersID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.PackageBase and not self.PackageBaseID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key PackageBaseID cannot be null.",
|
||||
orig="PackageVotes.PackageBaseID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.VoteTS:
|
||||
raise IntegrityError(
|
||||
statement="Column VoteTS cannot be null.",
|
||||
orig="PackageVotes.VoteTS",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -16,5 +16,5 @@ class RequestType(Base):
|
|||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
def name_display(self) -> str:
|
||||
""" Return the Name column with its first char capitalized. """
|
||||
"""Return the Name column with its first char capitalized."""
|
||||
return self.Name.title()
|
||||
|
|
|
@ -12,8 +12,10 @@ class Session(Base):
|
|||
__mapper_args__ = {"primary_key": [__table__.c.UsersID]}
|
||||
|
||||
User = relationship(
|
||||
_User, backref=backref("session", uselist=False),
|
||||
foreign_keys=[__table__.c.UsersID])
|
||||
_User,
|
||||
backref=backref("session", uselist=False),
|
||||
foreign_keys=[__table__.c.UsersID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -29,10 +31,13 @@ class Session(Base):
|
|||
user_exists = db.query(_User).filter(_User.ID == uid).exists()
|
||||
if not db.query(user_exists).scalar():
|
||||
raise IntegrityError(
|
||||
statement=("Foreign key UsersID cannot be null and "
|
||||
"must be a valid user's ID."),
|
||||
statement=(
|
||||
"Foreign key UsersID cannot be null and "
|
||||
"must be a valid user's ID."
|
||||
),
|
||||
orig="Sessions.UsersID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
|
||||
def generate_unique_sid():
|
||||
|
|
|
@ -12,16 +12,17 @@ class SSHPubKey(Base):
|
|||
__mapper_args__ = {"primary_key": [__table__.c.Fingerprint]}
|
||||
|
||||
User = relationship(
|
||||
"User", backref=backref("ssh_pub_keys", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UserID])
|
||||
"User",
|
||||
backref=backref("ssh_pub_keys", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UserID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
||||
|
||||
def get_fingerprint(pubkey: str) -> str:
|
||||
proc = Popen(["ssh-keygen", "-l", "-f", "-"], stdin=PIPE, stdout=PIPE,
|
||||
stderr=PIPE)
|
||||
proc = Popen(["ssh-keygen", "-l", "-f", "-"], stdin=PIPE, stdout=PIPE, stderr=PIPE)
|
||||
out, _ = proc.communicate(pubkey.encode())
|
||||
if proc.returncode:
|
||||
raise ValueError("The SSH public key is invalid.")
|
||||
|
|
|
@ -16,10 +16,12 @@ class Term(Base):
|
|||
raise IntegrityError(
|
||||
statement="Column Description cannot be null.",
|
||||
orig="Terms.Description",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.URL:
|
||||
raise IntegrityError(
|
||||
statement="Column URL cannot be null.",
|
||||
orig="Terms.URL",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -10,17 +10,19 @@ from aurweb.models.user import User as _User
|
|||
class TUVote(Base):
|
||||
__table__ = schema.TU_Votes
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {
|
||||
"primary_key": [__table__.c.VoteID, __table__.c.UserID]
|
||||
}
|
||||
__mapper_args__ = {"primary_key": [__table__.c.VoteID, __table__.c.UserID]}
|
||||
|
||||
VoteInfo = relationship(
|
||||
_TUVoteInfo, backref=backref("tu_votes", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.VoteID])
|
||||
_TUVoteInfo,
|
||||
backref=backref("tu_votes", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.VoteID],
|
||||
)
|
||||
|
||||
User = relationship(
|
||||
_User, backref=backref("tu_votes", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UserID])
|
||||
_User,
|
||||
backref=backref("tu_votes", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.UserID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
|
@ -29,10 +31,12 @@ class TUVote(Base):
|
|||
raise IntegrityError(
|
||||
statement="Foreign key VoteID cannot be null.",
|
||||
orig="TU_Votes.VoteID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.User and not self.UserID:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key UserID cannot be null.",
|
||||
orig="TU_Votes.UserID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
|
|
@ -14,8 +14,10 @@ class TUVoteInfo(Base):
|
|||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
||||
Submitter = relationship(
|
||||
_User, backref=backref("tu_voteinfo_set", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.SubmitterID])
|
||||
_User,
|
||||
backref=backref("tu_voteinfo_set", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.SubmitterID],
|
||||
)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
# Default Quorum, Yes, No and Abstain columns to 0.
|
||||
|
@ -29,40 +31,45 @@ class TUVoteInfo(Base):
|
|||
raise IntegrityError(
|
||||
statement="Column Agenda cannot be null.",
|
||||
orig="TU_VoteInfo.Agenda",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if self.User is None:
|
||||
raise IntegrityError(
|
||||
statement="Column User cannot be null.",
|
||||
orig="TU_VoteInfo.User",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if self.Submitted is None:
|
||||
raise IntegrityError(
|
||||
statement="Column Submitted cannot be null.",
|
||||
orig="TU_VoteInfo.Submitted",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if self.End is None:
|
||||
raise IntegrityError(
|
||||
statement="Column End cannot be null.",
|
||||
orig="TU_VoteInfo.End",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
if not self.Submitter:
|
||||
raise IntegrityError(
|
||||
statement="Foreign key SubmitterID cannot be null.",
|
||||
orig="TU_VoteInfo.SubmitterID",
|
||||
params=("NULL"))
|
||||
params=("NULL"),
|
||||
)
|
||||
|
||||
def __setattr__(self, key: str, value: typing.Any):
|
||||
""" Customize setattr to stringify any Quorum keys given. """
|
||||
"""Customize setattr to stringify any Quorum keys given."""
|
||||
if key == "Quorum":
|
||||
value = str(value)
|
||||
return super().__setattr__(key, value)
|
||||
|
||||
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)
|
||||
if key == "Quorum":
|
||||
return float(attr)
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
import hashlib
|
||||
|
||||
from typing import Set
|
||||
|
||||
import bcrypt
|
||||
|
||||
from fastapi import Request
|
||||
from sqlalchemy import or_
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
@ -12,7 +10,6 @@ from sqlalchemy.orm import backref, relationship
|
|||
import aurweb.config
|
||||
import aurweb.models.account_type
|
||||
import aurweb.schema
|
||||
|
||||
from aurweb import db, logging, schema, time, util
|
||||
from aurweb.models.account_type import AccountType as _AccountType
|
||||
from aurweb.models.ban import is_banned
|
||||
|
@ -24,7 +21,8 @@ SALT_ROUNDS_DEFAULT = 12
|
|||
|
||||
|
||||
class User(Base):
|
||||
""" An ORM model of a single Users record. """
|
||||
"""An ORM model of a single Users record."""
|
||||
|
||||
__table__ = schema.Users
|
||||
__tablename__ = __table__.name
|
||||
__mapper_args__ = {"primary_key": [__table__.c.ID]}
|
||||
|
@ -33,7 +31,8 @@ class User(Base):
|
|||
_AccountType,
|
||||
backref=backref("users", lazy="dynamic"),
|
||||
foreign_keys=[__table__.c.AccountTypeID],
|
||||
uselist=False)
|
||||
uselist=False,
|
||||
)
|
||||
|
||||
# High-level variables used to track authentication (not in DB).
|
||||
authenticated = False
|
||||
|
@ -41,50 +40,50 @@ class User(Base):
|
|||
|
||||
# Make this static to the class just in case SQLAlchemy ever
|
||||
# does something to bypass our constructor.
|
||||
salt_rounds = aurweb.config.getint("options", "salt_rounds",
|
||||
SALT_ROUNDS_DEFAULT)
|
||||
salt_rounds = aurweb.config.getint("options", "salt_rounds", SALT_ROUNDS_DEFAULT)
|
||||
|
||||
def __init__(self, Passwd: str = str(), **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",
|
||||
SALT_ROUNDS_DEFAULT)
|
||||
self.salt_rounds = aurweb.config.getint(
|
||||
"options", "salt_rounds", SALT_ROUNDS_DEFAULT
|
||||
)
|
||||
if Passwd:
|
||||
self.update_password(Passwd)
|
||||
|
||||
def update_password(self, password):
|
||||
self.Passwd = bcrypt.hashpw(
|
||||
password.encode(),
|
||||
bcrypt.gensalt(rounds=self.salt_rounds)).decode()
|
||||
password.encode(), bcrypt.gensalt(rounds=self.salt_rounds)
|
||||
).decode()
|
||||
|
||||
@staticmethod
|
||||
def minimum_passwd_length():
|
||||
return aurweb.config.getint("options", "passwd_min_len")
|
||||
|
||||
def is_authenticated(self):
|
||||
""" Return internal authenticated state. """
|
||||
"""Return internal authenticated state."""
|
||||
return self.authenticated
|
||||
|
||||
def valid_password(self, password: str):
|
||||
""" Check authentication against a given password. """
|
||||
"""Check authentication against a given password."""
|
||||
if password is None:
|
||||
return False
|
||||
|
||||
password_is_valid = False
|
||||
|
||||
try:
|
||||
password_is_valid = bcrypt.checkpw(password.encode(),
|
||||
self.Passwd.encode())
|
||||
password_is_valid = bcrypt.checkpw(password.encode(), self.Passwd.encode())
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# If our Salt column is not empty, we're using a legacy password.
|
||||
if not password_is_valid and self.Salt != str():
|
||||
# Try to login with legacy method.
|
||||
password_is_valid = hashlib.md5(
|
||||
f"{self.Salt}{password}".encode()
|
||||
).hexdigest() == self.Passwd
|
||||
password_is_valid = (
|
||||
hashlib.md5(f"{self.Salt}{password}".encode()).hexdigest()
|
||||
== self.Passwd
|
||||
)
|
||||
|
||||
# We got here, we passed the legacy authentication.
|
||||
# Update the password to our modern hash style.
|
||||
|
@ -96,9 +95,8 @@ class User(Base):
|
|||
def _login_approved(self, request: Request):
|
||||
return not is_banned(request) and not self.Suspended
|
||||
|
||||
def login(self, request: Request, password: str,
|
||||
session_time: int = 0) -> str:
|
||||
""" Login and authenticate a request. """
|
||||
def login(self, request: Request, password: str, session_time: int = 0) -> str:
|
||||
"""Login and authenticate a request."""
|
||||
|
||||
from aurweb import db
|
||||
from aurweb.models.session import Session, generate_unique_sid
|
||||
|
@ -127,9 +125,9 @@ class User(Base):
|
|||
self.LastLoginIPAddress = request.client.host
|
||||
if not self.session:
|
||||
sid = generate_unique_sid()
|
||||
self.session = db.create(Session, User=self,
|
||||
SessionID=sid,
|
||||
LastUpdateTS=now_ts)
|
||||
self.session = db.create(
|
||||
Session, User=self, SessionID=sid, LastUpdateTS=now_ts
|
||||
)
|
||||
else:
|
||||
last_updated = self.session.LastUpdateTS
|
||||
if last_updated and last_updated < now_ts:
|
||||
|
@ -148,9 +146,9 @@ class User(Base):
|
|||
|
||||
return self.session.SessionID
|
||||
|
||||
def has_credential(self, credential: Set[int],
|
||||
approved: list["User"] = list()):
|
||||
def has_credential(self, credential: Set[int], approved: list["User"] = list()):
|
||||
from aurweb.auth.creds import has_credential
|
||||
|
||||
return has_credential(self, credential, approved)
|
||||
|
||||
def logout(self, request: Request):
|
||||
|
@ -162,18 +160,18 @@ class User(Base):
|
|||
def is_trusted_user(self):
|
||||
return self.AccountType.ID in {
|
||||
aurweb.models.account_type.TRUSTED_USER_ID,
|
||||
aurweb.models.account_type.TRUSTED_USER_AND_DEV_ID
|
||||
aurweb.models.account_type.TRUSTED_USER_AND_DEV_ID,
|
||||
}
|
||||
|
||||
def is_developer(self):
|
||||
return self.AccountType.ID in {
|
||||
aurweb.models.account_type.DEVELOPER_ID,
|
||||
aurweb.models.account_type.TRUSTED_USER_AND_DEV_ID
|
||||
aurweb.models.account_type.TRUSTED_USER_AND_DEV_ID,
|
||||
}
|
||||
|
||||
def is_elevated(self):
|
||||
""" A User is 'elevated' when they have either a
|
||||
Trusted User or Developer AccountType. """
|
||||
"""A User is 'elevated' when they have either a
|
||||
Trusted User or Developer AccountType."""
|
||||
return self.AccountType.ID in {
|
||||
aurweb.models.account_type.TRUSTED_USER_ID,
|
||||
aurweb.models.account_type.DEVELOPER_ID,
|
||||
|
@ -196,18 +194,22 @@ class User(Base):
|
|||
:return: Boolean indicating whether `self` can edit `target`
|
||||
"""
|
||||
from aurweb.auth import creds
|
||||
|
||||
has_cred = self.has_credential(creds.ACCOUNT_EDIT, approved=[target])
|
||||
return has_cred and self.AccountTypeID >= target.AccountTypeID
|
||||
|
||||
def voted_for(self, package) -> bool:
|
||||
""" Has this User voted for package? """
|
||||
"""Has this User voted for package?"""
|
||||
from aurweb.models.package_vote import PackageVote
|
||||
return bool(package.PackageBase.package_votes.filter(
|
||||
PackageVote.UsersID == self.ID
|
||||
).scalar())
|
||||
|
||||
return bool(
|
||||
package.PackageBase.package_votes.filter(
|
||||
PackageVote.UsersID == self.ID
|
||||
).scalar()
|
||||
)
|
||||
|
||||
def notified(self, package) -> bool:
|
||||
""" Is this User being notified about package (or package base)?
|
||||
"""Is this User being notified about package (or package base)?
|
||||
|
||||
:param package: Package or PackageBase instance
|
||||
:return: Boolean indicating state of package notification
|
||||
|
@ -225,12 +227,14 @@ class User(Base):
|
|||
|
||||
# Run an exists() query where a pkgbase-related
|
||||
# PackageNotification exists for self (a user).
|
||||
return bool(db.query(
|
||||
query.filter(PackageNotification.UserID == self.ID).exists()
|
||||
).scalar())
|
||||
return bool(
|
||||
db.query(
|
||||
query.filter(PackageNotification.UserID == self.ID).exists()
|
||||
).scalar()
|
||||
)
|
||||
|
||||
def packages(self):
|
||||
""" Returns an ORM query to Package objects owned by this user.
|
||||
"""Returns an ORM query to Package objects owned by this user.
|
||||
|
||||
This should really be replaced with an internal ORM join
|
||||
configured for the User model. This has not been done yet
|
||||
|
@ -241,16 +245,24 @@ class User(Base):
|
|||
"""
|
||||
from aurweb.models.package import Package
|
||||
from aurweb.models.package_base import PackageBase
|
||||
return db.query(Package).join(PackageBase).filter(
|
||||
or_(
|
||||
PackageBase.PackagerUID == self.ID,
|
||||
PackageBase.MaintainerUID == self.ID
|
||||
|
||||
return (
|
||||
db.query(Package)
|
||||
.join(PackageBase)
|
||||
.filter(
|
||||
or_(
|
||||
PackageBase.PackagerUID == self.ID,
|
||||
PackageBase.MaintainerUID == self.ID,
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
def __repr__(self):
|
||||
return "<User(ID='%s', AccountType='%s', Username='%s')>" % (
|
||||
self.ID, str(self.AccountType), self.Username)
|
||||
self.ID,
|
||||
str(self.AccountType),
|
||||
self.Username,
|
||||
)
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.Username
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue