added mirrors app from archweb_pub

This commit is contained in:
Ismael Carnales 2009-10-31 13:22:09 -02:00
parent c1a197d29a
commit 6243f7ba66
6 changed files with 101 additions and 0 deletions

0
mirrors/__init__.py Normal file
View File

56
mirrors/views.py Normal file
View File

@ -0,0 +1,56 @@
from django import forms
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render_to_response
from archweb.main.models import Arch, Mirror, MirrorUrl
from archweb.main.utils import make_choice
class MirrorlistForm(forms.Form):
arch = forms.ChoiceField(required=True)
country = forms.ChoiceField(required=False)
def __init__(self, *args, **kwargs):
super(MirrorlistForm, self).__init__(*args, **kwargs)
arches = Arch.objects.exclude(name__iexact='any').order_by('name')
mirrors = Mirror.objects.values_list(
'country', flat=True).distinct().order_by('country')
self.fields['arch'].choices = make_choice(
[arch.name for arch in arches])
self.fields['country'].choices = [('all', 'All')] + make_choice(
[mirror for mirror in mirrors])
def choose(request):
if request.POST:
form = MirrorlistForm(data=request.POST)
if form.is_valid():
arch = form.cleaned_data['arch']
country = form.cleaned_data['country']
return HttpResponseRedirect(reverse(generate,
kwargs = {'arch' : arch, 'country' : country }))
else:
form = MirrorlistForm()
return render_to_response('mirrors/index.html',
{'mirrorlist_form': form})
def generate(request, arch='i686', country=None):
# do a quick sanity check on the architecture
archobj = get_object_or_404(Arch, name=arch)
qset = MirrorUrl.objects.filter(
Q(protocol__protocol__iexact='HTTP') |
Q(protocol__protocol__iexact='FTP'),
mirror__public=True, mirror__active=True, mirror__isos=True
)
if country and country != 'all':
qset = qset.filter(mirror__country__iexact=country)
qset = qset.order_by('mirror__country', 'mirror__name', 'url')
res = render_to_response('mirrors/mirrorlist.txt',
{
'mirror_urls': qset,
'arch': arch,
},
mimetype='text/plain')
return res
# vim: set ts=4 sw=4 et:

View File

@ -72,6 +72,7 @@
'django.contrib.sitemaps',
'django.contrib.admin',
'archweb.main', # contains shared models and libs
'archweb.mirrors',
'archweb.news',
'archweb.packages',
'archweb.todolists',

View File

@ -0,0 +1,25 @@
{% extends "base.html" %}
{% load package_extras %}
{% block title %}Arch Linux - Generate Mirrorlist{% endblock %}
{% block content %}
<div class="box">
<h2 class="title">Generate Custom Mirrorlist</h2>
<form method="post">
<table>
<tr>
<td>Architecture</td>
{% td_input mirrorlist_form.arch %}
</tr>
<tr>
<td>Country</td>
{% td_input mirrorlist_form.country %}
</tr>
<tr>
<td><input type="submit" value="Generate" /></td>
</tr>
</table>
</form>
</div>
{% endblock %}

View File

@ -0,0 +1,13 @@
{% comment %}
Yes, ugly templates are ugly, but in order to keep line breaks where we want
them, sacrifices have to be made. If editing this template, it is easiest to
forget about where line breaks are happening until you are done getting the
content right, and then go back later to fix it all up.
{% endcomment %}{% autoescape off %}#
# Arch Linux repository mirrorlist
# Generated on {% now "Y-m-d" %}
#{% for mirror_url in mirror_urls %}{% ifchanged %}
# {{ mirror_url.mirror.country }}{% endifchanged %}
#Server = {{ mirror_url.url}}$repo/os/{{ arch }}{% endfor %}
{% endautoescape %}

View File

@ -57,6 +57,12 @@
(r'^mirrors/$', 'archweb.devel.views.mirrorlist'),
(r'^mirrorlist/$', 'archweb.mirrors.views.choose'),
(r'^mirrorlist/(?P<arch>[\S]+)/(?P<country>[A-z0-9 ]+)/$',
'archweb.mirrors.views.generate'),
(r'^mirrorlist/(?P<arch>[\S]+)/$',
'archweb.mirrors.views.generate'),
(r'^devel/$', 'archweb.devel.views.index'),
(r'^devel/notify/$', 'archweb.devel.views.change_notify'),
(r'^devel/profile/$', 'archweb.devel.views.change_profile'),