aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubenwardy <rw@rubenwardy.com>2018-03-20 18:40:19 +0000
committerrubenwardy <rw@rubenwardy.com>2018-03-20 18:40:19 +0000
commitd03947462dc283588cada03a8456fe03233c0f2d (patch)
tree5d6b5744ab456f95b8a74d46906ec6f22637da4b
parent596f725d599f15b222d7ce2dcfc5b6a76aebb3e8 (diff)
downloadcheatdb-d03947462dc283588cada03a8456fe03233c0f2d.tar.xz
Add create release page
-rw-r--r--app/models.py5
-rw-r--r--app/templates/package_details.html3
-rw-r--r--app/templates/package_release_new.html19
-rw-r--r--app/views/packages.py32
4 files changed, 59 insertions, 0 deletions
diff --git a/app/models.py b/app/models.py
index 2943535..6a14f94 100644
--- a/app/models.py
+++ b/app/models.py
@@ -120,6 +120,11 @@ class Package(db.Model):
type=self.type.toName(),
author=self.author.username, name=self.name)
+ def getCreateReleaseURL(self):
+ return url_for("create_release_page",
+ type=self.type.toName(),
+ author=self.author.username, name=self.name)
+
def checkPerm(self, user, perm):
if not user.is_authenticated:
return False
diff --git a/app/templates/package_details.html b/app/templates/package_details.html
index 6a1ef35..a2db875 100644
--- a/app/templates/package_details.html
+++ b/app/templates/package_details.html
@@ -37,6 +37,9 @@
{% elif current_user.is_authenticated %}
<li><a href="">Suggest Change</a></li>
{% endif %}
+ {% if package.checkPerm(current_user, "MAKE_RELEASE") %}
+ <li><a href="{{ package.getCreateReleaseURL() }}">Create Release</a></li>
+ {% endif %}
</ul>
</aside>
diff --git a/app/templates/package_release_new.html b/app/templates/package_release_new.html
new file mode 100644
index 0000000..29be43f
--- /dev/null
+++ b/app/templates/package_release_new.html
@@ -0,0 +1,19 @@
+{% extends "base.html" %}
+
+{% block title %}
+ Create a release | {{ package.title }}
+{% endblock %}
+
+{% block content %}
+ {% from "macros/forms.html" import render_field, render_submit_field %}
+ <form method="POST" action="">
+ {{ form.hidden_tag() }}
+
+ {{ render_field(form.title) }}
+ {{ render_field(form.uploadOpt) }}
+ {{ render_field(form.vcsLabel) }}
+ {{ render_field(form.fileUpload) }}
+ {{ render_submit_field(form.submit) }}
+ <input type="submit" value="Go">
+ </form>
+{% endblock %}
diff --git a/app/views/packages.py b/app/views/packages.py
index d6b6e69..4543503 100644
--- a/app/views/packages.py
+++ b/app/views/packages.py
@@ -85,3 +85,35 @@ def edit_package_page(type, author, name):
return redirect(package.getDetailsURL()) # redirect
return render_template('package_edit.html', package=package, form=form)
+
+
+class PackageReleaseForm(FlaskForm):
+ name = StringField("Name")
+ title = StringField("Title")
+ uploadOpt = RadioField ("File", choices=[("vcs", "From VCS Commit or Branch"), ("upload", "File Upload")])
+ vcsLabel = StringField("VCS Commit or Branch", default="master")
+ fileUpload = FileField("File Upload")
+ submit = SubmitField('Save')
+
+@app.route("/<type>s/<author>/<name>/releases/new/", methods=['GET', 'POST'])
+@login_required
+def create_release_page(type, author, name):
+ package = getPageByInfo(type, author, name)
+ if not package.checkPerm(current_user, Permission.MAKE_RELEASE):
+ return redirect(package.getDetailsURL())
+
+ # Initial form class from post data and default data
+ form = PackageReleaseForm(formdata=request.form)
+ if request.method == "POST" and form.validate():
+ if form["uploadOpt"].data == "vcs":
+ rel = PackageRelease()
+ rel.package = package
+ rel.title = form["title"].data
+ rel.url = form["vcsLabel"].data
+ # TODO: get URL to commit from branch name
+ db.session.commit()
+ return redirect(package.getDetailsURL()) # redirect
+ else:
+ raise Exception("Unimplemented option = file upload")
+
+ return render_template('package_release_new.html', package=package, form=form)