From 079775f5f6599163f3b40a4bc9ddb7669ba91ef7 Mon Sep 17 00:00:00 2001 From: rubenwardy Date: Fri, 25 May 2018 17:41:16 +0100 Subject: [PATCH] Add dependency support to Edit Requests --- README.md | 16 ++++++++ app/models.py | 40 +++++++++++++++++++ .../packages/editrequest_create_edit.html | 2 + 3 files changed, 58 insertions(+) diff --git a/README.md b/README.md index c96fbf0..c5203e1 100644 --- a/README.md +++ b/README.md @@ -40,3 +40,19 @@ Then run the server: ./rundebug.py Then view in your web browser: http://localhost:5000/ + +## How-tos + +### Create migration + +```sh +# if sqlite +python setup.py -t +rm db.sqlite && python setup.py -t && FLASK_CONFIG=../config.cfg FLASK_APP=app/__init__.py flask db stamp head + +# Create migration +FLASK_CONFIG=../config.cfg FLASK_APP=app/__init__.py flask db migrate + +# Run migration +FLASK_CONFIG=../config.cfg FLASK_APP=app/__init__.py flask db migrate +``` diff --git a/app/models.py b/app/models.py index cafdf5d..c0c9a09 100644 --- a/app/models.py +++ b/app/models.py @@ -225,6 +225,9 @@ class PackagePropertyKey(enum.Enum): def convert(self, value): if self == PackagePropertyKey.tags: return ",".join([t.title for t in value]) + elif self == PackagePropertyKey.harddeps or self == PackagePropertyKey.softdeps: + return ",".join([t.author.username + "/" + t.name for t in value]) + else: return str(value) @@ -531,6 +534,43 @@ class EditRequestChange(db.Model): for tagTitle in self.newValue.split(","): tag = Tag.query.filter_by(title=tagTitle.strip()).first() package.tags.append(tag) + + elif self.key == PackagePropertyKey.harddeps: + package.harddeps.clear() + for pair in self.newValue.split(","): + key, value = pair.split("/") + if key is None or value is None: + continue + + user = User.query.filter_by(username=key).first() + if user is None: + continue + + dep = Package.query.filter_by(author=user, name=value).first() + if dep is None: + continue + + package.harddeps.append(dep) + + elif self.key == PackagePropertyKey.softdeps: + package.softdeps.clear() + for pair in self.newValue.split(","): + key, value = pair.split("/") + if key is None or value is None: + continue + + user = User.query.filter_by(username=key).first() + if user is None: + raise Exception("No such user!") + continue + + dep = Package.query.filter_by(author=user, name=value).first() + if dep is None: + raise Exception("No such package!") + continue + + package.softdeps.append(dep) + else: setattr(package, self.key.name, self.newValue) diff --git a/app/templates/packages/editrequest_create_edit.html b/app/templates/packages/editrequest_create_edit.html index d245206..987a292 100644 --- a/app/templates/packages/editrequest_create_edit.html +++ b/app/templates/packages/editrequest_create_edit.html @@ -18,6 +18,8 @@ {{ render_field(form.type) }} {{ render_field(form.license) }} {{ render_multiselect_field(form.tags) }} + {{ render_multiselect_field(form.harddeps) }} + {{ render_multiselect_field(form.softdeps) }} {{ render_field(form.repo) }} {{ render_field(form.website) }} {{ render_field(form.issueTracker) }}