Add a basic mirror details page
Still some work to do here, but this covers the basics of the public view we can show for mirrors and their associated data. The upstream and downstream links should be working OK to aid navigation, but right now we have some potential dead links for non-authenticated users if they click a link to a "private" mirror. Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
1c6099f4b2
commit
bc5a5781bf
@ -31,6 +31,12 @@ def supported_protocols(self):
|
||||
urls__mirror=self).order_by('protocol').distinct()
|
||||
return ", ".join([p.protocol for p in protocols])
|
||||
|
||||
def downstream(self):
|
||||
return Mirror.objects.filter(upstream=self).order_by('name')
|
||||
|
||||
def get_absolute_url(self):
|
||||
return '/mirrors/%s/' % self.name
|
||||
|
||||
class MirrorProtocol(models.Model):
|
||||
protocol = models.CharField(max_length=10, unique=True)
|
||||
def __unicode__(self):
|
||||
|
@ -1,6 +1,8 @@
|
||||
from django import forms
|
||||
from django.db.models import Avg, Count, Max, Min, StdDev
|
||||
from django.db.models import Q
|
||||
from django.http import Http404
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.views.generic.simple import direct_to_template
|
||||
|
||||
@ -77,6 +79,15 @@ def mirrors(request):
|
||||
return direct_to_template(request, 'mirrors/mirrors.html',
|
||||
{'mirror_list': mirrors})
|
||||
|
||||
def mirror_details(request, name):
|
||||
mirror = get_object_or_404(Mirror, name=name)
|
||||
if not request.user.is_authenticated() and \
|
||||
(not mirror.public or not mirror.active):
|
||||
# TODO: maybe this should be 403? but that would leak existence
|
||||
raise Http404
|
||||
return direct_to_template(request, 'mirrors/mirror_details.html',
|
||||
{'mirror': mirror})
|
||||
|
||||
def status(request):
|
||||
bad_timedelta = datetime.timedelta(days=3)
|
||||
status_info = get_mirror_statuses()
|
||||
|
58
templates/mirrors/mirror_details.html
Normal file
58
templates/mirrors/mirror_details.html
Normal file
@ -0,0 +1,58 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block title %}Arch Linux - {{ mirror.name }} - Mirror Details{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<!-- TODO: ids and classes -->
|
||||
<div id="pkgdetails" class="box">
|
||||
|
||||
<h2>Mirror Details: {{ mirror.name }}</h2>
|
||||
|
||||
<table id="pkginfo">
|
||||
<tr>
|
||||
<th>Name:</th>
|
||||
<td>{{ mirror.name }}</td>
|
||||
</tr><tr>
|
||||
<th>Tier:</th>
|
||||
<td>{{ mirror.get_tier_display }}</td>
|
||||
</tr><tr>
|
||||
<th>Upstream:</th>
|
||||
<!-- TODO: linking to non-public mirrors -->
|
||||
<td>{% if mirror.upstream %}
|
||||
<a href="{{ mirror.upstream.get_absolute_url }}"
|
||||
title="Mirror details for {{ mirror.upstream.name }}">{{ mirror.upstream.name }}</a>
|
||||
{% else %}None{% endif %}</td>
|
||||
</tr><tr>
|
||||
<th>Downstream:</th>
|
||||
{% with mirror.downstream as ds_mirrors %}
|
||||
<td>{% if ds_mirrors %}
|
||||
{% for ds in ds_mirrors %}
|
||||
<a href="{{ ds.get_absolute_url }}"
|
||||
title="Mirror details for {{ ds.name }}">{{ ds.name }}</a><br/>
|
||||
{% endfor %}
|
||||
{% else %}None{% endif %}
|
||||
</td>
|
||||
{% endwith %}
|
||||
</tr><tr>
|
||||
<th>Country:</th>
|
||||
<td>{{ mirror.country }}</td>
|
||||
</tr><tr>
|
||||
<th>Has ISOs:</th>
|
||||
<td>{{ mirror.isos|yesno }}</td>
|
||||
</tr><tr>
|
||||
<th>Protocols:</th>
|
||||
<td>{{ mirror.supported_protocols }}</td>
|
||||
</tr><tr>
|
||||
<th>Mirror URLs:</th>
|
||||
{% with mirror.urls.all as urls %}
|
||||
<td>{% if urls %}
|
||||
{% for u in urls %}
|
||||
<a href="{{ u.url }}">{{ u.url }}</a><br/>
|
||||
{% endfor %}
|
||||
{% else %}None{% endif %}
|
||||
</td>
|
||||
{% endwith %}
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
{% endblock %}
|
@ -24,7 +24,8 @@ <h2>Mirror Overview</h2>
|
||||
<tbody>
|
||||
{% for mirror in mirror_list %}
|
||||
<tr class="{% cycle 'odd' 'even' %}">
|
||||
<td>{{mirror.name}}</td>
|
||||
<td><a href="{{ mirror.get_absolute_url }}"
|
||||
title="Mirror details for {{ mirror.name }}">{{ mirror.name }}</a></td>
|
||||
<td>{{mirror.get_tier_display}}</td>
|
||||
<td>{{mirror.country}}</td>
|
||||
<td>{{mirror.isos|yesno}}</td>
|
||||
|
1
urls.py
1
urls.py
@ -73,6 +73,7 @@
|
||||
|
||||
(r'^mirrors/$', 'mirrors.views.mirrors', {}, 'mirrors-list'),
|
||||
(r'^mirrors/status/$', 'mirrors.views.status', {}, 'mirror-status'),
|
||||
(r'^mirrors/(?P<name>[\.\-\w]+)/$', 'mirrors.views.mirror_details'),
|
||||
|
||||
(r'^mirrorlist/$', 'mirrors.views.generate_mirrorlist', {}, 'mirrorlist'),
|
||||
(r'^mirrorlist/all/$', 'mirrors.views.find_mirrors', {'countries': ['all']}),
|
||||
|
Loading…
Reference in New Issue
Block a user