diff --git a/app/blueprints/packages/__init__.py b/app/blueprints/packages/__init__.py index 80b5280..a294af6 100644 --- a/app/blueprints/packages/__init__.py +++ b/app/blueprints/packages/__init__.py @@ -29,22 +29,22 @@ def get_package_tabs(user: User, package: Package): { "id": "edit", "title": "Edit Details", - "url": package.getEditURL() + "url": package.getURL("packages.create_edit") }, { "id": "releases", "title": "Releases", - "url": package.getReleaseListURL() + "url": package.getURL("packages.list_releases") }, { "id": "screenshots", "title": "Screenshots", - "url": package.getEditScreenshotsURL() + "url": package.getURL("packages.screenshots") }, { "id": "maintainers", "title": "Maintainers", - "url": package.getEditMaintainersURL() + "url": package.getURL("packages.edit_maintainers") }, { "id": "audit", @@ -59,7 +59,7 @@ def get_package_tabs(user: User, package: Package): { "id": "remove", "title": "Remove", - "url": package.getRemoveURL() + "url": package.getURL("packages.remove") } ] diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index 3e24c6c..e6a81dd 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -70,7 +70,7 @@ def list_all(): if qb.lucky: package = query.first() if package: - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) topic = qb.buildTopicQuery().first() if qb.search and topic: @@ -206,7 +206,7 @@ def download(package): return "", 204 else: flash("No download available.", "danger") - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) else: return redirect(release.getDownloadURL()) @@ -263,7 +263,7 @@ def create_edit(author=None, name=None): if package is None: abort(404) if not package.checkPerm(current_user, Permission.EDIT_PACKAGE): - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) author = package.author @@ -321,11 +321,11 @@ def create_edit(author=None, name=None): if wasNew and package.repo is not None: importRepoScreenshot.delay(package.id) - next_url = package.getDetailsURL() + next_url = package.getURL("packages.view") if wasNew and ("WTFPL" in package.license.name or "WTFPL" in package.media_license.name): next_url = url_for("flatpage", path="help/wtfpl", r=next_url) elif wasNew: - next_url = package.getSetupReleasesURL() + next_url = package.getURL("packages.setup_releases") return redirect(next_url) except LogicError as e: @@ -353,7 +353,7 @@ def move_to_state(package): if not package.canMoveToState(current_user, state): flash("You don't have permission to do that", "danger") - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) package.state = state msg = "Marked {} as {}".format(package.title, state.value) @@ -368,9 +368,9 @@ def move_to_state(package): msg = "Approved {}".format(package.title) - addNotification(package.maintainers, current_user, NotificationType.PACKAGE_APPROVAL, msg, package.getDetailsURL(), package) + addNotification(package.maintainers, current_user, NotificationType.PACKAGE_APPROVAL, msg, package.getURL("packages.view"), package) severity = AuditSeverity.NORMAL if current_user in package.maintainers else AuditSeverity.EDITOR - addAuditLog(severity, current_user, msg, package.getDetailsURL(), package) + addAuditLog(severity, current_user, msg, package.getURL("packages.view"), package) db.session.commit() @@ -381,7 +381,7 @@ def move_to_state(package): else: return redirect(url_for('threads.new', pid=package.id, title='Package approval comments')) - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) @bp.route("/packages///remove/", methods=["GET", "POST"]) @@ -395,7 +395,7 @@ def remove(package): if "delete" in request.form: if not package.checkPerm(current_user, Permission.DELETE_PACKAGE): flash("You don't have permission to do that.", "danger") - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) package.state = PackageState.DELETED @@ -411,19 +411,19 @@ def remove(package): elif "unapprove" in request.form: if not package.checkPerm(current_user, Permission.UNAPPROVE_PACKAGE): flash("You don't have permission to do that.", "danger") - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) package.state = PackageState.WIP msg = "Unapproved {}".format(package.title) - addNotification(package.maintainers, current_user, NotificationType.PACKAGE_APPROVAL, msg, package.getDetailsURL(), package) - addAuditLog(AuditSeverity.EDITOR, current_user, msg, package.getDetailsURL(), package) + addNotification(package.maintainers, current_user, NotificationType.PACKAGE_APPROVAL, msg, package.getURL("packages.view"), package) + addAuditLog(AuditSeverity.EDITOR, current_user, msg, package.getURL("packages.view"), package) db.session.commit() flash("Unapproved package", "success") - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) else: abort(400) @@ -440,7 +440,7 @@ class PackageMaintainersForm(FlaskForm): def edit_maintainers(package): if not package.checkPerm(current_user, Permission.EDIT_MAINTAINERS): flash("You do not have permission to edit maintainers", "danger") - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) form = PackageMaintainersForm(formdata=request.form) if request.method == "GET": @@ -457,12 +457,12 @@ def edit_maintainers(package): if thread: thread.watchers.append(user) addNotification(user, current_user, NotificationType.MAINTAINER, - "Added you as a maintainer of {}".format(package.title), package.getDetailsURL(), package) + "Added you as a maintainer of {}".format(package.title), package.getURL("packages.view"), package) for user in package.maintainers: if user != package.author and not user in users: addNotification(user, current_user, NotificationType.MAINTAINER, - "Removed you as a maintainer of {}".format(package.title), package.getDetailsURL(), package) + "Removed you as a maintainer of {}".format(package.title), package.getURL("packages.view"), package) package.maintainers.clear() package.maintainers.extend(users) @@ -470,13 +470,13 @@ def edit_maintainers(package): package.maintainers.append(package.author) msg = "Edited {} maintainers".format(package.title) - addNotification(package.author, current_user, NotificationType.MAINTAINER, msg, package.getDetailsURL(), package) + addNotification(package.author, current_user, NotificationType.MAINTAINER, msg, package.getURL("packages.view"), package) severity = AuditSeverity.NORMAL if current_user == package.author else AuditSeverity.MODERATION - addAuditLog(severity, current_user, msg, package.getDetailsURL(), package) + addAuditLog(severity, current_user, msg, package.getURL("packages.view"), package) db.session.commit() - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) users = User.query.filter(User.rank >= UserRank.NEW_MEMBER).order_by(db.asc(User.username)).all() @@ -498,11 +498,11 @@ def remove_self_maintainers(package): package.maintainers.remove(current_user) addNotification(package.author, current_user, NotificationType.MAINTAINER, - "Removed themself as a maintainer of {}".format(package.title), package.getDetailsURL(), package) + "Removed themself as a maintainer of {}".format(package.title), package.getURL("packages.view"), package) db.session.commit() - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) @bp.route("/packages///audit/") @@ -556,7 +556,7 @@ def alias_create_edit(package: Package, alias_id: int = None): form.populate_obj(alias) db.session.commit() - return redirect(package.getAliasListURL()) + return redirect(package.getURL("packages.alias_list")) return render_template("packages/alias_create_edit.html", package=package, form=form) diff --git a/app/blueprints/packages/releases.py b/app/blueprints/packages/releases.py index f771c7d..da8b249 100644 --- a/app/blueprints/packages/releases.py +++ b/app/blueprints/packages/releases.py @@ -75,7 +75,7 @@ class EditPackageReleaseForm(FlaskForm): @is_package_page def create_release(package): if not package.checkPerm(current_user, Permission.MAKE_RELEASE): - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) # Initial form class from post data and default data form = CreatePackageReleaseForm() @@ -144,7 +144,7 @@ def edit_release(package, id): canEdit = package.checkPerm(current_user, Permission.MAKE_RELEASE) canApprove = release.checkPerm(current_user, Permission.APPROVE_RELEASE) if not (canEdit or canApprove): - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) # Initial form class from post data and default data form = EditPackageReleaseForm(formdata=request.form, obj=release) @@ -171,7 +171,7 @@ def edit_release(package, id): release.approved = False db.session.commit() - return redirect(package.getReleaseListURL()) + return redirect(package.getURL("packages.list_releases")) return render_template("packages/release_edit.html", package=package, release=release, form=form) @@ -193,7 +193,7 @@ class BulkReleaseForm(FlaskForm): @is_package_page def bulk_change_release(package): if not package.checkPerm(current_user, Permission.MAKE_RELEASE): - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) # Initial form class from post data and default data form = BulkReleaseForm() @@ -211,7 +211,7 @@ def bulk_change_release(package): db.session.commit() - return redirect(package.getReleaseListURL()) + return redirect(package.getURL("packages.list_releases")) return render_template("packages/release_bulk_change.html", package=package, form=form) @@ -225,12 +225,12 @@ def delete_release(package, id): abort(404) if not release.checkPerm(current_user, Permission.DELETE_RELEASE): - return redirect(release.getReleaseListURL()) + return redirect(package.getURL("packages.list_releases")) db.session.delete(release) db.session.commit() - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) class PackageUpdateConfigFrom(FlaskForm): @@ -279,7 +279,7 @@ def update_config(package): if not package.repo: flash("Please add a Git repository URL in order to set up automatic releases", "danger") - return redirect(package.getEditURL()) + return redirect(package.getURL("packages.create_edit")) form = PackageUpdateConfigFrom(obj=package.update_config) if request.method == "GET": @@ -303,9 +303,9 @@ def update_config(package): if not form.disable.data and package.releases.count() == 0: flash("Now, please create an initial release", "success") - return redirect(package.getCreateReleaseURL()) + return redirect(package.getURL("packages.create_release")) - return redirect(package.getReleaseListURL()) + return redirect(package.getURL("packages.list_releases")) return render_template("packages/update_config.html", package=package, form=form) @@ -318,7 +318,7 @@ def setup_releases(package): abort(403) if package.update_config: - return redirect(package.getUpdateConfigURL()) + return redirect(package.getURL("packages.update_config")) return render_template("packages/release_wizard.html", package=package) diff --git a/app/blueprints/packages/reviews.py b/app/blueprints/packages/reviews.py index 9383754..4523a7f 100644 --- a/app/blueprints/packages/reviews.py +++ b/app/blueprints/packages/reviews.py @@ -46,7 +46,7 @@ class ReviewForm(FlaskForm): def review(package): if current_user in package.maintainers: flash("You can't review your own package!", "danger") - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) review = PackageReview.query.filter_by(package=package, author=current_user).first() @@ -110,7 +110,7 @@ def review(package): db.session.commit() - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) return render_template("packages/review_create_edit.html", form=form, package=package, review=review) diff --git a/app/blueprints/packages/screenshots.py b/app/blueprints/packages/screenshots.py index 7228617..f86880b 100644 --- a/app/blueprints/packages/screenshots.py +++ b/app/blueprints/packages/screenshots.py @@ -50,10 +50,10 @@ class EditPackageScreenshotsForm(FlaskForm): @is_package_page def screenshots(package): if not package.checkPerm(current_user, Permission.ADD_SCREENSHOTS): - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) if package.screenshots.count() == 0: - return redirect(package.getNewScreenshotURL()) + return redirect(package.getURL("packages.create_screenshot")) form = EditPackageScreenshotsForm(obj=package) form.cover_image.query = package.screenshots @@ -63,7 +63,7 @@ def screenshots(package): if order: try: do_order_screenshots(current_user, package, order.split(",")) - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) except LogicError as e: flash(e.message, "danger") @@ -80,14 +80,14 @@ def screenshots(package): @is_package_page def create_screenshot(package): if not package.checkPerm(current_user, Permission.ADD_SCREENSHOTS): - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) # Initial form class from post data and default data form = CreateScreenshotForm() if form.validate_on_submit(): try: do_create_screenshot(current_user, package, form.title.data, form.fileUpload.data) - return redirect(package.getEditScreenshotsURL()) + return redirect(package.getURL("packages.screenshots")) except LogicError as e: flash(e.message, "danger") @@ -105,7 +105,7 @@ def edit_screenshot(package, id): canEdit = package.checkPerm(current_user, Permission.ADD_SCREENSHOTS) canApprove = package.checkPerm(current_user, Permission.APPROVE_SCREENSHOT) if not (canEdit or canApprove): - return redirect(package.getEditScreenshotsURL()) + return redirect(package.getURL("packages.screenshots")) # Initial form class from post data and default data form = EditScreenshotForm(obj=screenshot) @@ -121,7 +121,7 @@ def edit_screenshot(package, id): screenshot.approved = wasApproved db.session.commit() - return redirect(package.getEditScreenshotsURL()) + return redirect(package.getURL("packages.screenshots")) return render_template("packages/screenshot_edit.html", package=package, screenshot=screenshot, form=form) @@ -145,4 +145,4 @@ def delete_screenshot(package, id): db.session.delete(screenshot) db.session.commit() - return redirect(package.getEditScreenshotsURL()) + return redirect(package.getURL("packages.screenshots")) diff --git a/app/blueprints/threads/__init__.py b/app/blueprints/threads/__init__.py index bf2bf63..7a6493f 100644 --- a/app/blueprints/threads/__init__.py +++ b/app/blueprints/threads/__init__.py @@ -296,7 +296,7 @@ def new(): flash("Please wait before opening another thread", "danger") if package: - return redirect(package.getDetailsURL()) + return redirect(package.getURL("packages.view")) else: return redirect(url_for("homepage.home")) diff --git a/app/blueprints/todo/__init__.py b/app/blueprints/todo/__init__.py index f083a24..a30c140 100644 --- a/app/blueprints/todo/__init__.py +++ b/app/blueprints/todo/__init__.py @@ -221,8 +221,8 @@ def apply_all_updates(username): msg = "Created release {} (Applied all Git Update Detection)".format(rel.title) addNotification(package.maintainers, current_user, NotificationType.PACKAGE_EDIT, msg, - rel.getEditURL(), package) - addAuditLog(AuditSeverity.NORMAL, current_user, msg, package.getDetailsURL(), package) + rel.getURL("packages.create_edit"), package) + addAuditLog(AuditSeverity.NORMAL, current_user, msg, package.getURL("packages.view"), package) db.session.commit() return redirect(url_for("todo.view_user", username=username)) diff --git a/app/logic/packages.py b/app/logic/packages.py index 29f6f5b..5402ec5 100644 --- a/app/logic/packages.py +++ b/app/logic/packages.py @@ -176,7 +176,7 @@ def do_edit_package(user: User, package: Package, was_new: bool, was_web: bool, msg = "Edited {} ({})".format(package.title, reason) severity = AuditSeverity.NORMAL if user in package.maintainers else AuditSeverity.EDITOR - addAuditLog(severity, user, msg, package.getDetailsURL(), package) + addAuditLog(severity, user, msg, package.getURL("packages.view"), package) db.session.commit() diff --git a/app/logic/releases.py b/app/logic/releases.py index 5ab2ada..9ba52be 100644 --- a/app/logic/releases.py +++ b/app/logic/releases.py @@ -53,7 +53,7 @@ def do_create_vcs_release(user: User, package: Package, title: str, ref: str, msg = "Created release {}".format(rel.title) else: msg = "Created release {} ({})".format(rel.title, reason) - addAuditLog(AuditSeverity.NORMAL, user, msg, package.getDetailsURL(), package) + addAuditLog(AuditSeverity.NORMAL, user, msg, package.getURL("packages.view"), package) db.session.commit() @@ -88,7 +88,7 @@ def do_create_zip_release(user: User, package: Package, title: str, file, msg = "Created release {}".format(rel.title) else: msg = "Created release {} ({})".format(rel.title, reason) - addAuditLog(AuditSeverity.NORMAL, user, msg, package.getDetailsURL(), package) + addAuditLog(AuditSeverity.NORMAL, user, msg, package.getURL("packages.view"), package) db.session.commit() diff --git a/app/logic/screenshots.py b/app/logic/screenshots.py index 6b26ac5..ad3851d 100644 --- a/app/logic/screenshots.py +++ b/app/logic/screenshots.py @@ -32,8 +32,8 @@ def do_create_screenshot(user: User, package: Package, title: str, file, reason: else: msg = "Created screenshot {} ({})".format(ss.title, reason) - addNotification(package.maintainers, user, NotificationType.PACKAGE_EDIT, msg, package.getDetailsURL(), package) - addAuditLog(AuditSeverity.NORMAL, user, msg, package.getDetailsURL(), package) + addNotification(package.maintainers, user, NotificationType.PACKAGE_EDIT, msg, package.getURL("packages.view"), package) + addAuditLog(AuditSeverity.NORMAL, user, msg, package.getURL("packages.view"), package) db.session.commit() diff --git a/app/models/packages.py b/app/models/packages.py index 7bdec7f..a9da3ad 100644 --- a/app/models/packages.py +++ b/app/models/packages.py @@ -435,7 +435,7 @@ class Package(db.Model): "thumbnail": (base_url + tnurl) if tnurl is not None else None, "screenshots": [base_url + ss.url for ss in self.screenshots], - "url": base_url + self.getDownloadURL(), + "url": base_url + self.getURL("packages.download"), "release": release and release.id, "score": round(self.score * 10) / 10, @@ -460,17 +460,12 @@ class Package(db.Model): else: return screenshot.url - def getURL(self, endpoint): - return url_for(endpoint, author=self.author.username, name=self.name) - - def getDetailsURL(self, absolute=False): + def getURL(self, endpoint, absolute=False, **kwargs): if absolute: from app.utils import abs_url_for - return abs_url_for("packages.view", - author=self.author.username, name=self.name) + return abs_url_for(endpoint, author=self.author.username, name=self.name, **kwargs) else: - return url_for("packages.view", - author=self.author.username, name=self.name) + return url_for(endpoint, author=self.author.username, name=self.name, **kwargs) def getShieldURL(self, type): from app.utils import abs_url_for @@ -479,15 +474,7 @@ class Package(db.Model): def makeShield(self, type): return "[![ContentDB]({})]({})" \ - .format(self.getShieldURL(type), self.getDetailsURL(True)) - - def getEditURL(self): - return url_for("packages.create_edit", - author=self.author.username, name=self.name) - - def getReleaseListURL(self): - return url_for("packages.list_releases", - author=self.author.username, name=self.name) + .format(self.getShieldURL(type), self.getURL("packages.view", True)) def getSetStateURL(self, state): if type(state) == str: @@ -498,54 +485,6 @@ class Package(db.Model): return url_for("packages.move_to_state", author=self.author.username, name=self.name, state=state.name.lower()) - def getRemoveURL(self): - return url_for("packages.remove", - author=self.author.username, name=self.name) - - def getNewScreenshotURL(self): - return url_for("packages.create_screenshot", - author=self.author.username, name=self.name) - - def getEditScreenshotsURL(self): - return url_for("packages.screenshots", - author=self.author.username, name=self.name) - - def getCreateReleaseURL(self, **kwargs): - return url_for("packages.create_release", - author=self.author.username, name=self.name, **kwargs) - - def getBulkReleaseURL(self): - return url_for("packages.bulk_change_release", - author=self.author.username, name=self.name) - - def getUpdateConfigURL(self, trigger=None, action=None): - return url_for("packages.update_config", - author=self.author.username, name=self.name, trigger=trigger, action=action) - - def getSetupReleasesURL(self): - return url_for("packages.setup_releases", - author=self.author.username, name=self.name) - - def getDownloadURL(self): - return url_for("packages.download", - author=self.author.username, name=self.name) - - def getEditMaintainersURL(self): - return url_for("packages.edit_maintainers", - author=self.author.username, name=self.name) - - def getRemoveSelfMaintainerURL(self): - return url_for("packages.remove_self_maintainers", - author=self.author.username, name=self.name) - - def getReviewURL(self, external=False): - return url_for('packages.review', _external=external, - author=self.author.username, name=self.name) - - def getAuditLogURL(self): - return url_for('packages.audit', - author=self.author.username, name=self.name) - def getDownloadRelease(self, version=None): for rel in self.releases: if rel.approved and (version is None or @@ -555,14 +494,6 @@ class Package(db.Model): return None - def getAliasListURL(self): - return url_for("packages.alias_list", - author=self.author.username, name=self.name) - - def getAliasCreateURL(self): - return url_for("packages.alias_create_edit", - author=self.author.username, name=self.name) - def checkPerm(self, user, perm): if not user.is_authenticated: return False @@ -1049,7 +980,7 @@ class PackageUpdateConfig(db.Model): return self.last_tag or self.last_commit def get_create_release_url(self): - return self.package.getCreateReleaseURL(title=self.get_title(), ref=self.get_ref()) + return self.package.getURL("packages.create_release", title=self.get_title(), ref=self.get_ref()) class PackageAlias(db.Model): diff --git a/app/models/threads.py b/app/models/threads.py index d4c6efe..2be48f1 100644 --- a/app/models/threads.py +++ b/app/models/threads.py @@ -150,7 +150,7 @@ class PackageReview(db.Model): return 1 if self.recommends else -1 def getEditURL(self): - return self.package.getReviewURL() + return self.package.getURL("packages.review") def getDeleteURL(self): return url_for("packages.delete_review", diff --git a/app/tasks/importtasks.py b/app/tasks/importtasks.py index 0a76560..808571f 100644 --- a/app/tasks/importtasks.py +++ b/app/tasks/importtasks.py @@ -262,7 +262,7 @@ def check_update_config_impl(package): db.session.add(rel) msg = "Created release {} (Git Update Detection)".format(rel.title) - addSystemAuditLog(AuditSeverity.NORMAL, msg, package.getDetailsURL(), package) + addSystemAuditLog(AuditSeverity.NORMAL, msg, package.getURL("packages.view"), package) db.session.commit() @@ -320,7 +320,7 @@ def check_update_config(self, package_id): .strip() msg = "Error: {}.\n\nTask ID: {}\n\n[Change update configuration]({})" \ - .format(err, self.request.id, package.getUpdateConfigURL()) + .format(err, self.request.id, package.getURL("packages.update_config")) post_bot_message(package, "Failed to check git repository", msg) diff --git a/app/templates/index.html b/app/templates/index.html index ea2dc95..1f6981f 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -32,7 +32,7 @@ {% set cover_image = package.cover_image.url or package.getMainScreenshotURL() %} {% set tags = package.tags | sort(attribute="views", reverse=True) %}