diff options
author | rubenwardy <rubenwardy@gmail.com> | 2018-04-03 14:13:11 +0100 |
---|---|---|
committer | rubenwardy <rubenwardy@gmail.com> | 2018-04-03 14:13:16 +0100 |
commit | 5f2a3992602b59614a8c3d9a193e4669705c048c (patch) | |
tree | 549196f7317670279c0fc60c4e49a125a9dd9474 | |
parent | 743d1d909fbfb704185475c162f6ae2396272c75 (diff) | |
download | cheatdb-5f2a3992602b59614a8c3d9a193e4669705c048c.tar.xz |
Add package licenses
-rw-r--r-- | app/models.py | 16 | ||||
-rw-r--r-- | app/templates/packages/create_edit.html | 1 | ||||
-rw-r--r-- | app/templates/packages/editrequest_create.html | 1 | ||||
-rw-r--r-- | app/templates/packages/view.html | 4 | ||||
-rw-r--r-- | app/views/packages.py | 17 | ||||
-rw-r--r-- | setup.py | 11 |
6 files changed, 38 insertions, 12 deletions
diff --git a/app/models.py b/app/models.py index 444d606..4f5fee2 100644 --- a/app/models.py +++ b/app/models.py @@ -116,6 +116,18 @@ class User(db.Model, UserMixin): else: raise Exception("Permission {} is not related to users".format(perm.name)) +class License(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(50), nullable=False, unique=True) + packages = db.relationship("Package", backref="license", lazy="dynamic") + + def __init__(self, v): + self.name = v + + def __str__(self): + return self.name + + class PackageType(enum.Enum): MOD = "Mod" GAME = "Game" @@ -142,6 +154,7 @@ class PackagePropertyKey(enum.Enum): shortDesc = "Short Description" desc = "Description" type = "Type" + license = "License" tags = "Tags" repo = "Repository" website = "Website" @@ -170,6 +183,8 @@ class Package(db.Model): desc = db.Column(db.Text, nullable=True) type = db.Column(db.Enum(PackageType)) + license_id = db.Column(db.Integer, db.ForeignKey("license.id")) + approved = db.Column(db.Boolean, nullable=False, default=False) # Downloads @@ -198,6 +213,7 @@ class Package(db.Model): "author": self.author.display_name, "shortDesc": self.shortDesc, "type": self.type.toName(), + "license": self.license.name, "repo": self.repo, "url": base_url + self.getDownloadURL(), "screenshots": [base_url + ss.url for ss in self.screenshots] diff --git a/app/templates/packages/create_edit.html b/app/templates/packages/create_edit.html index ad8ff6b..a7ebdfd 100644 --- a/app/templates/packages/create_edit.html +++ b/app/templates/packages/create_edit.html @@ -14,6 +14,7 @@ {{ render_field(form.shortDesc) }} {{ render_field(form.desc) }} {{ render_field(form.type) }} + {{ render_field(form.license) }} {{ render_field(form.tags) }} {{ render_field(form.repo) }} {{ render_field(form.website) }} diff --git a/app/templates/packages/editrequest_create.html b/app/templates/packages/editrequest_create.html index cdf5cfa..fe8e482 100644 --- a/app/templates/packages/editrequest_create.html +++ b/app/templates/packages/editrequest_create.html @@ -14,6 +14,7 @@ {{ render_field(form.shortDesc) }} {{ render_field(form.desc) }} {{ render_field(form.type) }} + {{ render_field(form.license) }} {{ render_field(form.tags) }} {{ render_field(form.repo) }} {{ render_field(form.website) }} diff --git a/app/templates/packages/view.html b/app/templates/packages/view.html index 55d0d57..5c68ead 100644 --- a/app/templates/packages/view.html +++ b/app/templates/packages/view.html @@ -46,6 +46,10 @@ <td>Type</td> <td>{{ package.type.value }}</td> </tr> + <tr> + <td>License</td> + <td>{{ package.license.name }}</td> + </tr> </table> <ul class="buttonset linedbuttonset"> diff --git a/app/views/packages.py b/app/views/packages.py index e532d3f..f683749 100644 --- a/app/views/packages.py +++ b/app/views/packages.py @@ -9,7 +9,7 @@ from .utils import * from flask_wtf import FlaskForm from wtforms import * from wtforms.validators import * -from wtforms.ext.sqlalchemy.fields import QuerySelectMultipleField +from wtforms.ext.sqlalchemy.fields import QuerySelectField, QuerySelectMultipleField # TODO: the following could be made into one route, except I"m not sure how @@ -135,6 +135,7 @@ class PackageForm(FlaskForm): shortDesc = StringField("Short Description", [InputRequired(), Length(1,200)]) desc = TextAreaField("Long Description", [Optional(), Length(0,10000)]) type = SelectField("Type", [InputRequired()], choices=PackageType.choices(), coerce=PackageType.coerce, default=PackageType.MOD) + license = QuerySelectField("License", [InputRequired()], query_factory=lambda: License.query, get_pk=lambda a: a.id, get_label=lambda a: a.name) tags = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query, get_pk=lambda a: a.id, get_label=lambda a: a.title) repo = StringField("Repo URL", [Optional(), URL()]) website = StringField("Website URL", [Optional(), URL()]) @@ -227,11 +228,6 @@ class EditRequestForm(PackageForm): edit_title = StringField("Edit Title", [InputRequired(), Length(1, 100)]) edit_desc = TextField("Edit Description", [Optional()]) -class UnresolvedPackage(Package): - edit_title = "" - edit_desc = "" - - @app.route("/<ptype>s/<author>/<name>/requests/new/", methods=["GET","POST"]) @login_required def create_editrequest_page(ptype, author, name): @@ -239,19 +235,16 @@ def create_editrequest_page(ptype, author, name): form = EditRequestForm(request.form, obj=package) if request.method == "POST" and form.validate(): - editedPackage = UnresolvedPackage() - form.populate_obj(editedPackage) - erequest = EditRequest() erequest.package = package erequest.author = current_user - erequest.title = editedPackage.edit_title - erequest.desc = editedPackage.edit_desc + erequest.title = form["edit_title"].data + erequest.desc = form["edit_desc"].data db.session.add(erequest) wasChangeMade = False for e in PackagePropertyKey: - newValue = getattr(editedPackage, e.name) + newValue = form[e.name].data oldValue = getattr(package, e.name) newValueComp = newValue @@ -44,10 +44,19 @@ if not os.path.isfile("db.sqlite"): db.session.add(row) + + licenses = {} + for license in ["LGPLv2.1", "LGPLv3", "GPLv2.1", "GPLv3", "AGPLv2.1", "AGPLv3", + "MIT", "Apache", "BSD", "ZLib", "CC0", "CC-BY-SA", "CC-BY", "CC-BY-NC-SA"]: + row = License(license) + licenses[row.name] = row + db.session.add(row) + mod1 = Package() mod1.approved = True mod1.name = "awards" mod1.title = "Awards" + mod1.license = licenses["LGPLv2.1"] mod1.type = PackageType.MOD mod1.author = ruben mod1.tags.append(tags["player_effects"]) @@ -83,6 +92,7 @@ awards.register_achievement("award_mesefind",{ mod2.title = "Mesecons" mod2.tags.append(tags["tools"]) mod2.type = PackageType.MOD + mod2.license = licenses["LGPLv3"] mod2.author = jeija mod2.repo = "https://github.com/minetest-mods/mesecons/" mod2.issueTracker = "https://github.com/minetest-mods/mesecons/issues" @@ -180,6 +190,7 @@ No warranty is provided, express or implied, for any part of the project. game1.name = "capturetheflag" game1.title = "Capture The Flag" game1.type = PackageType.GAME + game1.license = licenses["LGPLv2.1"] game1.author = ruben game1.tags.append(tags["pvp"]) game1.tags.append(tags["survival"]) |