From: Michael Tremer Date: Tue, 4 Dec 2012 16:07:45 +0000 (+0100) Subject: Redesign dependency table. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5669a87f966596fe980a4f0ef7f824f0925a5152;p=pbs.git Redesign dependency table. --- diff --git a/backend/packages.py b/backend/packages.py index b48ef218..b05f8c8e 100644 --- a/backend/packages.py +++ b/backend/packages.py @@ -352,6 +352,14 @@ class Package(base.Object): def size(self): return self.data.size + def has_deps(self): + """ + Returns True if the package has got dependencies. + + Always filter out the uuid provides. + """ + return len(self.deps) > 1 + @property def deps(self): if self._deps is None: @@ -373,7 +381,7 @@ class Package(base.Object): @property def provides(self): - return [d[1] for d in self.deps if d[0] == "provides"] + return [d[1] for d in self.deps if d[0] == "provides" and not d[1].startswith("uuid(")] @property def conflicts(self): @@ -383,6 +391,14 @@ class Package(base.Object): def obsoletes(self): return [d[1] for d in self.deps if d[0] == "obsoletes"] + @property + def suggests(self): + return [d[1] for d in self.deps if d[0] == "suggests"] + + @property + def recommends(self): + return [d[1] for d in self.deps if d[0] == "recommends"] + @property def commit_id(self): return self.data.commit_id @@ -538,6 +554,10 @@ class File(base.Object): @property def viewable(self): + # Empty files cannot be viewed. + if self.size == 0: + return False + for ext in FILE_EXTENSIONS_VIEWABLE: if self.name.endswith(ext): return True diff --git a/data/templates/modules/packages/dependency-table.html b/data/templates/modules/packages/dependency-table.html new file mode 100644 index 00000000..4a8da5b6 --- /dev/null +++ b/data/templates/modules/packages/dependency-table.html @@ -0,0 +1,27 @@ +
+ {% for name, deps in dependencies %} +
+ {% if name == "provides" %} +

{{ _("Provides") }}

+ {% elif name == "requires" %} +

{{ _("Requires") }}

+ {% elif name == "prerequires" %} +

{{ _("Pre-requires") }}

+ {% elif name == "conflicts" %} +

{{ _("Conflicts") }}

+ {% elif name == "obsoletes" %} +

{{ _("Obsoletes") }}

+ {% elif name == "recommends" %} +

{{ _("Recommends") }}

+ {% elif name == "suggests" %} +

{{ _("Suggests") }}

+ {% end %} + +
    + {% for d in deps %} +
  • {{ d }}
  • + {% end %} +
+
+ {% end %} +
diff --git a/data/templates/package-detail.html b/data/templates/package-detail.html index c660ea3f..6e584038 100644 --- a/data/templates/package-detail.html +++ b/data/templates/package-detail.html @@ -1,6 +1,6 @@ {% extends "base.html" %} -{% block title %}{{ _("Package") }}: {{ pkg.name }}{% end block %} +{% block title %}{{ _("Package") }}: {{ pkg.friendly_name }}{% end block %} {% block body %} -

- {{ _("Package") }}: {{ pkg.friendly_name }} -
{{ pkg.summary }} -

+

+ {{ _("Package") }}: {{ pkg.friendly_name }}
+ {{ pkg.summary }} +

-
{{ pkg.description }}
+ {% module Text(pkg.description) %}
@@ -126,7 +126,7 @@ {{ _("Size") }} {{ format_size(pkg.filesize) }} - {% if pkg.type == "binary" %} + {% if pkg.type == "binary" and not pkg.size == pkg.filesize %} ({{ _("%(size)s when installed") % { "size" : format_size(pkg.size) } }}) {% end %} @@ -146,131 +146,32 @@
-
-
- {% if pkg.build %} - - - {{ _("Download") }} - - {% end %} -
-
-
- - {% if pkg.type == "binary" %} -
-
-

{{ _("Dependencies") }}

- -
- + {% if pkg.build %} + + + {{ _("Download") }} + -
- {% if pkg.provides %} -
-
    - {% for dep in pkg.provides %} - {% if not dep.startswith("uuid(") %} -
  • {{ dep }}
  • - {% end %} - {% end %} -
-
- {% end %} - - {% if pkg.requires or pkg.prerequires %} -
-
    - {% for dep in pkg.requires %} -
  • {{ dep }}
  • - {% end %} -
- - {% if pkg.prerequires %} -

{{ _("Prerequires") }}

- -
    - {% for dep in pkg.prerequires %} -
  • {{ dep }}
  • - {% end %} -
- {% end %} -
- {% end %} +
+ {% end %} - {% if pkg.obsoletes %} -
-
    - {% for dep in pkg.obsoletes %} -
  • {{ dep }}
  • - {% end %} -
-
- {% end %} + {% if pkg.has_deps() %} +
- {% if pkg.conflicts %} -
-
    - {% for dep in pkg.conflicts %} -
  • {{ dep }}
  • - {% end %} -
-
- {% end %} -
-
+ {% if pkg.type == "source" %} +

{{ _("Build dependencies") }}

+ {% else %} +

{{ _("Dependencies") }}

+ {% end %} -
-
-
- {% elif pkg.type == "source" %} -
-
-

{{ _("Build dependencies") }}

-
    - {% for dep in pkg.requires %} -
  • {{ dep }}
  • - {% end %} -
-
-
+ {% module PackagesDependencyTable(pkg) %} {% end %} {% if pkg.filelist %} -

{{ _("Files") }}

+
+ +

{{ _("Filelist") }}

+ {% module PackageFilesTable(pkg, pkg.filelist) %} {% end %} {% end block %} diff --git a/web/__init__.py b/web/__init__.py index 4986f02c..f07b754b 100644 --- a/web/__init__.py +++ b/web/__init__.py @@ -50,6 +50,9 @@ class Application(tornado.web.Application): "Changelog" : ChangelogModule, "ChangelogEntry" : ChangelogEntryModule, + # Packages + "PackagesDependencyTable" : PackagesDependencyTableModule, + "CommitsTable" : CommitsTableModule, "JobsBoxes" : JobsBoxesModule, "JobState" : JobStateModule, diff --git a/web/handlers_packages.py b/web/handlers_packages.py index d2602735..d87c28aa 100644 --- a/web/handlers_packages.py +++ b/web/handlers_packages.py @@ -225,5 +225,5 @@ class PackageFileViewHandler(PackageFileDownloadHandler): content = f.read() f.close() - self.render("packages/view_file.html", pkg=pkg, filename=filename, + self.render("packages/view-file.html", pkg=pkg, filename=filename, mimetype=mimetype, content=content, filesize=f.size) diff --git a/web/ui_modules.py b/web/ui_modules.py index a5b593cb..d941e25a 100644 --- a/web/ui_modules.py +++ b/web/ui_modules.py @@ -1,5 +1,8 @@ #!/usr/bin/python +from __future__ import division + +import math import pytz import re import string @@ -140,6 +143,40 @@ class PackagesTableModule(UIModule): packages=packages) +class PackagesDependencyTableModule(UIModule): + def render(self, pkg): + if pkg.type == "source": + all_deps = [ + (None, pkg.requires), + ] + else: + all_deps = [ + ("provides", pkg.provides), + ("requires", pkg.requires), + ("prerequires", pkg.prerequires), + ("conflicts", pkg.conflicts), + ("obsoletes", pkg.obsoletes), + ("recommends", pkg.recommends), + ("suggests", pkg.suggests), + ] + + has_deps = [] + for name, deps in all_deps: + if deps: + has_deps.append((name, deps)) + + if len(has_deps): + span = math.floor(12 / len(has_deps)) + + if span > 3: + span = 3 + else: + span = 12 + + return self.render_string("modules/packages/dependency-table.html", + pkg=pkg, dependencies=has_deps, span=span) + + class PackageTable2Module(UIModule): def render(self, packages): return self.render_string("modules/package-table-detail.html",