diff options
author | rubenwardy <rw@rubenwardy.com> | 2020-01-21 22:59:44 +0000 |
---|---|---|
committer | rubenwardy <rw@rubenwardy.com> | 2020-01-21 23:02:12 +0000 |
commit | 7ac7af477403f67e75018d77901ddf45a9457805 (patch) | |
tree | 5ed09b6b6ae2a0c2f0d2379ca8817451d1136373 | |
parent | 5fa0a7866a53624e65866ec261a4bb7b77d45ef8 (diff) | |
download | cheatdb-7ac7af477403f67e75018d77901ddf45a9457805.tar.xz |
Sort dependencies in package page
-rw-r--r-- | app/models.py | 23 | ||||
-rw-r--r-- | app/templates/packages/view.html | 33 |
2 files changed, 46 insertions, 10 deletions
diff --git a/app/models.py b/app/models.py index 96ef655..714c5a0 100644 --- a/app/models.py +++ b/app/models.py @@ -338,6 +338,14 @@ class Dependency(db.Model): else: raise Exception("Either meta or package must be given, but not both!") + def getName(self): + if self.meta_package: + return self.meta_package.name + elif self.package: + return self.package.name + else: + assert False + def __str__(self): if self.package is not None: return self.package.author.username + "/" + self.package.name @@ -450,6 +458,21 @@ class Package(db.Model): def getIsFOSS(self): return self.license.is_foss and self.media_license.is_foss + def getSortedDependencies(self, is_hard=None): + query = self.dependencies + if is_hard is not None: + query = query.filter_by(optional=not is_hard) + + deps = query.all() + deps.sort(key = lambda x: x.getName()) + return deps + + def getSortedHardDependencies(self): + return self.getSortedDependencies(True) + + def getSortedOptionalDependencies(self): + return self.getSortedDependencies(False) + def getState(self): if self.approved: return "approved" diff --git a/app/templates/packages/view.html b/app/templates/packages/view.html index 362f4f4..7bed662 100644 --- a/app/templates/packages/view.html +++ b/app/templates/packages/view.html @@ -261,27 +261,40 @@ <div class="card my-4"> <div class="card-header">Dependencies</div> <div class="card-body"> - {% for dep in package.dependencies %} - {% if dep.optional %} - {% set color="secondary" %} - {% else %} - {% set color="primary" %} - {% endif %} - + <div class="card-subtitle mb-2 text-muted">{{ _("Required") }}</div> + {% for dep in package.getSortedHardDependencies() %} {%- if dep.package %} - <a class="badge badge-{{ color }}" + <div </div class="badge badge-primary" href="{{ dep.package.getDetailsURL() }}"> {{ dep.package.title }} by {{ dep.package.author.display_name }} {% elif dep.meta_package %} - <a class="badge badge-{{ color }}" + <a class="badge badge-primary" href="{{ url_for('metapackages.view', name=dep.meta_package.name) }}"> {{ dep.meta_package.name }} {% else %} {{ "Excepted package or meta_package in dep!" | throw }} {% endif %}</a> {% else %} - <i>No dependencies</i> + <i>No required dependencies</i> {% endfor %} + + {% set optional_deps=package.getSortedOptionalDependencies() %} + {% if optional_deps %} + <div class="card-subtitle my-2 text-muted">{{ _("Optional") }}</div> + {% for dep in optional_deps %} + {%- if dep.package %} + <a class="badge badge-secondary" + href="{{ dep.package.getDetailsURL() }}"> + {{ dep.package.title }} by {{ dep.package.author.display_name }} + {% elif dep.meta_package %} + <a class="badge badge-secondary" + href="{{ url_for('metapackages.view', name=dep.meta_package.name) }}"> + {{ dep.meta_package.name }} + {% else %} + {{ "Excepted package or meta_package in dep!" | throw }} + {% endif %}</a> + {% endfor %} + {% endif %} </div> </div> {% endif %} |