X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=app%2Fmodels.py;h=ade4083594f07c939a65e42c0d75da2c9c7c4b92;hb=bbc89bb2c2a6b74fb36c04659dfe45e75351c58c;hp=62ac1ee9b29ecb7010565e6355c7a52933dce443;hpb=08f6bd8befa266d40f56b143193c8c1ca5fb2716;p=cheatdb.git diff --git a/app/models.py b/app/models.py index 62ac1ee..ade4083 100644 --- a/app/models.py +++ b/app/models.py @@ -1,4 +1,4 @@ -# Content DB +# ContentDB # Copyright (C) 2018 rubenwardy # # This program is free software: you can redistribute it and/or modify @@ -80,6 +80,7 @@ class Permission(enum.Enum): MAKE_RELEASE = "MAKE_RELEASE" DELETE_RELEASE = "DELETE_RELEASE" ADD_SCREENSHOTS = "ADD_SCREENSHOTS" + REIMPORT_META = "REIMPORT_META" APPROVE_SCREENSHOT = "APPROVE_SCREENSHOT" APPROVE_RELEASE = "APPROVE_RELEASE" APPROVE_NEW = "APPROVE_NEW" @@ -93,6 +94,7 @@ class Permission(enum.Enum): COMMENT_THREAD = "COMMENT_THREAD" LOCK_THREAD = "LOCK_THREAD" DELETE_REPLY = "DELETE_REPLY" + EDIT_REPLY = "EDIT_REPLY" UNAPPROVE_PACKAGE = "UNAPPROVE_PACKAGE" TOPIC_DISCARD = "TOPIC_DISCARD" CREATE_TOKEN = "CREATE_TOKEN" @@ -338,7 +340,7 @@ provides = db.Table("provides", db.Column("metapackage_id", db.Integer, db.ForeignKey("meta_package.id"), primary_key=True) ) -tags = db.Table("tags", +Tags = db.Table("tags", db.Column("tag_id", db.Integer, db.ForeignKey("tag.id"), primary_key=True), db.Column("package_id", db.Integer, db.ForeignKey("package.id"), primary_key=True) ) @@ -357,11 +359,12 @@ class Dependency(db.Model): optional = db.Column(db.Boolean, nullable=False, default=False) __table_args__ = (db.UniqueConstraint("depender_id", "package_id", "meta_package_id", name="_dependency_uc"), ) - def __init__(self, depender=None, package=None, meta=None): + def __init__(self, depender=None, package=None, meta=None, optional=False): if depender is None: return self.depender = depender + self.optional = optional packageProvided = package is not None metaProvided = meta is not None @@ -469,7 +472,7 @@ class Package(db.Model): dependencies = db.relationship("Dependency", backref="depender", lazy="dynamic", foreign_keys=[Dependency.depender_id]) - tags = db.relationship("Tag", secondary=tags, lazy="select", + tags = db.relationship("Tag", secondary=Tags, lazy="select", backref=db.backref("packages", lazy=True)) releases = db.relationship("PackageRelease", backref="package", @@ -491,6 +494,8 @@ class Package(db.Model): self.created_at = package.created_at self.approved = package.approved + self.maintainers.append(self.author) + for e in PackagePropertyKey: setattr(self, e.name, getattr(package, e.name)) @@ -670,6 +675,10 @@ class Package(db.Model): return url_for("packages.remove_self_maintainers", author=self.author.username, name=self.name) + def getUpdateFromReleaseURL(self): + return url_for("packages.update_from_release", + author=self.author.username, name=self.name) + def getReviewURL(self): return url_for('packages.review', author=self.author.username, name=self.name) @@ -702,7 +711,8 @@ class Package(db.Model): elif perm == Permission.MAKE_RELEASE or perm == Permission.ADD_SCREENSHOTS: return isMaintainer - elif perm == Permission.EDIT_PACKAGE or perm == Permission.APPROVE_CHANGES or perm == Permission.APPROVE_RELEASE: + elif perm == Permission.EDIT_PACKAGE or perm == Permission.REIMPORT_META or \ + perm == Permission.APPROVE_CHANGES or perm == Permission.APPROVE_RELEASE: return isMaintainer and user.rank.atLeast(UserRank.MEMBER if self.approved else UserRank.NEW_MEMBER) # Anyone can change the package name when not approved, but only editors when approved @@ -748,6 +758,8 @@ class MetaPackage(db.Model): name = db.Column(db.String(100), unique=True, nullable=False) dependencies = db.relationship("Dependency", backref="meta_package", lazy="dynamic") + mp_name_valid = db.CheckConstraint("name ~* '^[a-z0-9_]+$'") + def __init__(self, name=None): self.name = name @@ -1089,10 +1101,11 @@ class Thread(db.Model): created_at = db.Column(db.DateTime, nullable=False, default=datetime.datetime.utcnow) - replies = db.relationship("ThreadReply", backref="thread", lazy="dynamic") + replies = db.relationship("ThreadReply", backref="thread", lazy="dynamic", \ + order_by=db.asc("thread_reply_id")) watchers = db.relationship("User", secondary=watchers, lazy="subquery", \ - backref=db.backref("watching", lazy=True)) + backref=db.backref("watching", lazy=True)) def getViewURL(self): return url_for("threads.view", id=self.id) @@ -1146,7 +1159,10 @@ class ThreadReply(db.Model): elif type(perm) != Permission: raise Exception("Unknown permission given to ThreadReply.checkPerm()") - if perm == Permission.DELETE_REPLY: + if perm == Permission.EDIT_REPLY: + return user == self.author and user.rank.atLeast(UserRank.MEMBER) and not self.thread.locked + + elif perm == Permission.DELETE_REPLY: return user.rank.atLeast(UserRank.MODERATOR) and self.thread.replies[0] != self else: