aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/models.py25
-rw-r--r--app/templates/packages/list.html14
-rw-r--r--app/templates/packages/view.html9
-rw-r--r--app/views/packages.py3
4 files changed, 49 insertions, 2 deletions
diff --git a/app/models.py b/app/models.py
index f3903ff..ab88fc6 100644
--- a/app/models.py
+++ b/app/models.py
@@ -147,6 +147,10 @@ class PackagePropertyKey(enum.Enum):
issueTracker = "Issue Tracker"
forums = "Forum Topic ID"
+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)
+)
class Package(db.Model):
id = db.Column(db.Integer, primary_key=True)
@@ -167,7 +171,10 @@ class Package(db.Model):
issueTracker = db.Column(db.String(200), nullable=True)
forums = db.Column(db.Integer, nullable=False)
- # Releases
+
+ tags = db.relationship('Tag', secondary=tags, lazy='subquery',
+ backref=db.backref('packages', lazy=True))
+
releases = db.relationship("PackageRelease", backref="package",
lazy="dynamic", order_by=db.desc("package_release_releaseDate"))
@@ -266,6 +273,22 @@ class Package(db.Model):
else:
raise Exception("Permission {} is not related to packages".format(perm.name))
+class Tag(db.Model):
+ id = db.Column(db.Integer, primary_key=True)
+ title = db.Column(db.String(100), nullable=False)
+ backgroundColor = db.Column(db.String(6), nullable=False)
+ textColor = db.Column(db.String(6), nullable=False)
+
+ def __init__(self, title, backgroundColor="000000", textColor="ffffff"):
+ self.title = title
+ self.backgroundColor = backgroundColor
+ self.textColor = textColor
+
+ def getName(self):
+ import re
+ regex = re.compile('[^a-z_]')
+ return regex.sub("", self.title.lower().replace(" ", "_"))
+
class PackageRelease(db.Model):
id = db.Column(db.Integer, primary_key=True)
diff --git a/app/templates/packages/list.html b/app/templates/packages/list.html
index 1c40cfa..666e5af 100644
--- a/app/templates/packages/list.html
+++ b/app/templates/packages/list.html
@@ -19,4 +19,18 @@
<li><i>No packages available</i></ul>
{% endfor %}
</ul>
+
+ <h3>Tags</h3>
+ <div class="box box_grey alert alert-warning">
+ Filtering by tag doesn't actually work yet!
+ </div>
+ <ul>
+ {% for t in tags %}
+ <li><a href="{{ url_for('packages_page', q=(query or '')+' tag:'+t.getName()) }}">
+ {{ t.title }}
+ </a></li>
+ {% else %}
+ <li><i>No tags available</i></ul>
+ {% endfor %}
+ </ul>
{% endblock %}
diff --git a/app/templates/packages/view.html b/app/templates/packages/view.html
index 58631c9..55d0d57 100644
--- a/app/templates/packages/view.html
+++ b/app/templates/packages/view.html
@@ -98,6 +98,15 @@
{% endfor %}
</ul>
+ <h3>Tags</h3>
+ <ul>
+ {% for t in package.tags %}
+ <li>{{ t.title }}</li>
+ {% else %}
+ <li>No tags.</li>
+ {% endfor %}
+ </ul>
+
{% if current_user.is_authenticated or requests %}
<h3>Edit Requests</h3>
diff --git a/app/views/packages.py b/app/views/packages.py
index 6f809f2..c9ad24f 100644
--- a/app/views/packages.py
+++ b/app/views/packages.py
@@ -29,7 +29,8 @@ def doPackageList(type):
if shouldReturnJson():
return jsonify([package.getAsDictionary(app.config["BASE_URL"]) for package in query.all()])
else:
- return render_template("packages/list.html", title=title, packages=query.all(), query=search)
+ tags = Tag.query.all()
+ return render_template("packages/list.html", title=title, packages=query.all(), query=search, tags=tags)
@app.route("/packages/")