]> git.lizzy.rs Git - cheatdb.git/commitdiff
Sort dependencies in package page
authorrubenwardy <rw@rubenwardy.com>
Tue, 21 Jan 2020 22:59:44 +0000 (22:59 +0000)
committerrubenwardy <rw@rubenwardy.com>
Tue, 21 Jan 2020 23:02:12 +0000 (23:02 +0000)
app/models.py
app/templates/packages/view.html

index 96ef655ccf1eb4c7ed2092038ed6f765b18d6807..714c5a0e4028dbec3285468ca8a1642944e59044 100644 (file)
@@ -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"
index 362f4f4a64d27954bcb34293826d0163314d47ae..7bed662cd1b997f7659bb13358503b34967167ec 100644 (file)
                                <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 %}