aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app.py2
-rw-r--r--repos/__init__.py8
-rw-r--r--repos/base.py4
-rw-r--r--templates/badge.svg.jinja30
4 files changed, 16 insertions, 28 deletions
diff --git a/app.py b/app.py
index 030fa94..248bb8d 100644
--- a/app.py
+++ b/app.py
@@ -14,7 +14,7 @@ def hello_world():
@app.route('/badge/<package>.svg')
def badge(package: str):
versions = repos.get_versions(package)
- newest_version = max(v for family in versions.values() for v in family.values())
+ newest_version = max(versions.values())
rendered = render_template('badge.svg.jinja', versions=versions, newest_version=newest_version)
response = make_response(rendered)
response.headers['Content-Type'] = 'image/svg+xml'
diff --git a/repos/__init__.py b/repos/__init__.py
index fc81260..ab6aa76 100644
--- a/repos/__init__.py
+++ b/repos/__init__.py
@@ -1,7 +1,7 @@
from typing import Mapping, List
from . import alpine_linux, arch_linux
-from .base import Repository
+from .base import Repository, Version
__all__ = [
'get_versions',
@@ -18,12 +18,10 @@ all_repos: List[Repository] = [
*repos_from(arch_linux),
]
-def get_versions(package: str) -> Mapping[str, Mapping[str, str]]:
+def get_versions(package: str) -> Mapping[str, Version]:
result = dict()
for repo in all_repos:
repo_versions = repo.get_versions()
if package in repo_versions:
- if repo.family not in result:
- result[repo.family] = dict()
- result[repo.family][repo.repo] = repo_versions[package]
+ result[repo.full_name()] = repo_versions[package]
return result
diff --git a/repos/base.py b/repos/base.py
index 1bd4ae3..c7790c1 100644
--- a/repos/base.py
+++ b/repos/base.py
@@ -60,7 +60,7 @@ class Repository:
index_url: str
parse: Callable[[Path], Mapping[str, Version]]
- def _full_name(self):
+ def full_name(self):
return f'{self.family} {self.repo}'
def _cache_dir(self) -> Path:
@@ -88,7 +88,7 @@ class Repository:
response = requests.get(self.index_url, headers=headers, stream=True)
if response.status_code != requests.codes.not_modified:
response.raise_for_status()
- print('Re-downloading', self._full_name())
+ print('Re-downloading', self.full_name())
with downloaded_file.open('wb') as f:
for chunk in response.iter_content(chunk_size=256):
f.write(chunk)
diff --git a/templates/badge.svg.jinja b/templates/badge.svg.jinja
index 972c39a..8143cff 100644
--- a/templates/badge.svg.jinja
+++ b/templates/badge.svg.jinja
@@ -2,20 +2,13 @@
{%- set ROW_MARGIN = 2 -%}
{%- set FONT_SIZE_PERCENT = 75 -%}
{%- set FONT_SIZE = (ROW_HEIGHT - ROW_MARGIN) * FONT_SIZE_PERCENT / 100 -%}
-{%- set ROWS = 1 + versions|length + (versions.values()|map('length')|sum) -%}
+{%- set ROWS = 1 + versions|length -%}
{%- set OUTER_MARGIN = 5 -%}
-{%- set REPO_LEFT_MARGIN = 15 -%}
{%- set FONT_WIDENESS = 0.5 -%}
-{# ugh. just ugh. #}
-{%- set ns = namespace(longest_repo = 0, longest_version = 0) -%}
-{%- for family_contents in versions.values() -%}
- {%- set this_longest_repo = family_contents.keys()|map('length')|max -%}
- {%- set this_longest_version = family_contents.values()|map('string')|map('length')|max -%}
- {%- set ns.longest_repo = [ns.longest_repo, this_longest_repo]|max -%}
- {%- set ns.longest_version = [ns.longest_version, this_longest_version]|max -%}
-{%- endfor -%}
-{%- set VERSION_X = OUTER_MARGIN + REPO_LEFT_MARGIN + ns.longest_repo * FONT_WIDENESS * FONT_SIZE -%}
-{%- set VERSION_WIDTH = OUTER_MARGIN + ns.longest_version * FONT_WIDENESS * FONT_SIZE -%}
+{%- set LONGEST_REPO = versions.keys()|map('length')|max -%}
+{%- set LONGEST_VERSION = versions.values()|map('string')|map('length')|max -%}
+{%- set VERSION_X = OUTER_MARGIN + LONGEST_REPO * FONT_WIDENESS * FONT_SIZE -%}
+{%- set VERSION_WIDTH = OUTER_MARGIN + LONGEST_VERSION * FONT_WIDENESS * FONT_SIZE -%}
{%- set WIDTH = VERSION_X + VERSION_WIDTH -%}
{%- set ns = namespace(y = 0) -%}
{%- macro y(offset=0) -%}{{ ns.y + offset }}{%- endmacro -%}
@@ -27,13 +20,10 @@
<text x="5" y="{{ texty() }}" fill="white">Packaging Status</text>
<line x1="0" y1="{{ y(ROW_HEIGHT - ROW_MARGIN / 2) }}" x2="{{ WIDTH }}" y2="{{ y(ROW_HEIGHT - ROW_MARGIN / 2) }}"
stroke="white" stroke-width="{{ ROW_MARGIN }}"></line>{{ end_row() }}
- {% for family, family_contents in versions.items() %}
- <text x="{{ OUTER_MARGIN }}" y="{{ texty() }}">{{ family }}</text>{{ end_row() }}
- {% for repo, version in family_contents.items() %}
- <text x="{{ REPO_LEFT_MARGIN }}" y="{{ texty() }}">{{ repo }}</text>
- <rect x="{{ VERSION_X }}" y="{{ y() }}" width="{{ VERSION_WIDTH }}" height="{{ ROW_HEIGHT }}"
- fill="{% if version < newest_version %}red{% else %}green{% endif %}"></rect>
- <text x="{{ VERSION_X + OUTER_MARGIN }}" y="{{ texty() }}">{{ version }}</text>{{ end_row() }}
- {% endfor %}
+ {% for repo, version in versions.items() %}
+ <text x="{{ OUTER_MARGIN }}" y="{{ texty() }}">{{ repo }}</text>
+ <rect x="{{ VERSION_X }}" y="{{ y() }}" width="{{ VERSION_WIDTH }}" height="{{ ROW_HEIGHT }}"
+ fill="{% if version < newest_version %}red{% else %}green{% endif %}"></rect>
+ <text x="{{ VERSION_X + OUTER_MARGIN }}" y="{{ texty() }}">{{ version }}</text>{{ end_row() }}
{% endfor %}
</svg>