summaryrefslogtreecommitdiffstats
path: root/releng
diff options
context:
space:
mode:
authorjelle van der Waa <jelle@vdwaa.nl>2018-01-29 20:09:55 +0100
committerAngel Velásquez <angvp@archlinux.org>2018-01-29 14:09:55 -0500
commit2ff2b26aa92c8efd21090562091361924a3a9428 (patch)
tree171281f5013048c225519cf759bff030b73391ca /releng
parentf42f357fdf20d76bc5468ec227dac66cd0ca3ca8 (diff)
downloadarchweb-2ff2b26aa92c8efd21090562091361924a3a9428.tar.gz
archweb-2ff2b26aa92c8efd21090562091361924a3a9428.zip
Remove old releng feedback form (#80)
Remove the old feedback functionality for released iso's. The last submission was in 2012 and it's no longer used by the current released iso's.
Diffstat (limited to 'releng')
-rw-r--r--releng/admin.py11
-rw-r--r--releng/models.py84
-rw-r--r--releng/urls.py10
-rw-r--r--releng/views.py194
4 files changed, 5 insertions, 294 deletions
diff --git a/releng/admin.py b/releng/admin.py
index 9c93c4be..09af9171 100644
--- a/releng/admin.py
+++ b/releng/admin.py
@@ -1,8 +1,6 @@
from django.contrib import admin
-from .models import (Architecture, BootType, Bootloader, ClockChoice,
- Filesystem, HardwareType, InstallType, Iso, IsoType, Module, Source,
- Test, Release)
+from .models import (Iso, Release)
class IsoAdmin(admin.ModelAdmin):
list_display = ('name', 'created', 'active', 'removed')
@@ -21,14 +19,7 @@ class ReleaseAdmin(admin.ModelAdmin):
readonly_fields = ('created', 'last_modified')
-SIMPLE_MODELS = (Architecture, BootType, Bootloader, ClockChoice, Filesystem,
- HardwareType, InstallType, IsoType, Module, Source)
-
-for model in SIMPLE_MODELS:
- admin.site.register(model)
-
admin.site.register(Iso, IsoAdmin)
-admin.site.register(Test, TestAdmin)
admin.site.register(Release, ReleaseAdmin)
# vim: set ts=4 sw=4 et:
diff --git a/releng/models.py b/releng/models.py
index 6a0f15dc..8a8d0ad2 100644
--- a/releng/models.py
+++ b/releng/models.py
@@ -13,21 +13,6 @@ from django.utils.safestring import mark_safe
from main.utils import set_created_field, parse_markdown
-class IsoOption(models.Model):
- name = models.CharField(max_length=200)
-
- def __unicode__(self):
- return self.name
-
- class Meta:
- abstract = True
-
-
-class RollbackOption(IsoOption):
- class Meta:
- abstract = True
-
-
class Iso(models.Model):
name = models.CharField(max_length=255)
created = models.DateTimeField(editable=False)
@@ -44,73 +29,6 @@ class Iso(models.Model):
verbose_name = 'ISO'
-class Architecture(IsoOption):
- pass
-
-
-class IsoType(IsoOption):
- class Meta:
- verbose_name = 'ISO type'
-
-
-class BootType(IsoOption):
- pass
-
-
-class HardwareType(IsoOption):
- pass
-
-
-class InstallType(IsoOption):
- pass
-
-
-class Source(IsoOption):
- pass
-
-
-class ClockChoice(IsoOption):
- pass
-
-
-class Filesystem(RollbackOption):
- pass
-
-
-class Module(RollbackOption):
- pass
-
-
-class Bootloader(IsoOption):
- pass
-
-
-class Test(models.Model):
- user_name = models.CharField(max_length=500)
- user_email = models.EmailField('email address')
- ip_address = models.GenericIPAddressField('IP address', unpack_ipv4=True)
- created = models.DateTimeField(editable=False)
-
- iso = models.ForeignKey(Iso)
- architecture = models.ForeignKey(Architecture)
- iso_type = models.ForeignKey(IsoType)
- boot_type = models.ForeignKey(BootType)
- hardware_type = models.ForeignKey(HardwareType)
- install_type = models.ForeignKey(InstallType)
- source = models.ForeignKey(Source)
- clock_choice = models.ForeignKey(ClockChoice)
- filesystem = models.ForeignKey(Filesystem)
- modules = models.ManyToManyField(Module, blank=True)
- bootloader = models.ForeignKey(Bootloader)
- rollback_filesystem = models.ForeignKey(Filesystem,
- related_name="rollback_test_set", null=True, blank=True)
- rollback_modules = models.ManyToManyField(Module,
- related_name="rollback_test_set", blank=True)
-
- success = models.BooleanField(default=True)
- comments = models.TextField(null=True, blank=True)
-
-
class Release(models.Model):
release_date = models.DateField(db_index=True)
version = models.CharField(max_length=50, unique=True)
@@ -185,7 +103,7 @@ class Release(models.Model):
return metadata
-for model in (Iso, Test, Release):
+for model in (Iso, Release):
pre_save.connect(set_created_field, sender=model,
dispatch_uid="releng.models")
diff --git a/releng/urls.py b/releng/urls.py
index 57013291..eff17115 100644
--- a/releng/urls.py
+++ b/releng/urls.py
@@ -2,15 +2,6 @@ from django.conf.urls import include, patterns
from .views import ReleaseListView, ReleaseDetailView
-feedback_patterns = patterns('releng.views',
- (r'^$', 'test_results_overview', {}, 'releng-test-overview'),
- (r'^submit/$', 'submit_test_result', {}, 'releng-test-submit'),
- (r'^thanks/$', 'submit_test_thanks', {}, 'releng-test-thanks'),
- (r'^iso/(?P<iso_id>\d+)/$', 'test_results_iso', {}, 'releng-results-iso'),
- (r'^(?P<option>.+)/(?P<value>\d+)/$','test_results_for', {}, 'releng-results-for'),
- (r'^iso/overview/$', 'iso_overview', {}, 'releng-iso-overview'),
-)
-
releases_patterns = patterns('releng.views',
(r'^$',
ReleaseListView.as_view(), {}, 'releng-release-list'),
@@ -28,7 +19,6 @@ netboot_patterns = patterns('releng.views',
)
urlpatterns = patterns('',
- (r'^feedback/', include(feedback_patterns)),
(r'^releases/', include(releases_patterns)),
(r'^netboot/', include(netboot_patterns)),
)
diff --git a/releng/views.py b/releng/views.py
index c3a10256..b962a4d3 100644
--- a/releng/views.py
+++ b/releng/views.py
@@ -1,204 +1,16 @@
from base64 import b64decode
import json
-from django import forms
-from django.conf import settings
from django.core.serializers.json import DjangoJSONEncoder
from django.core.urlresolvers import reverse
-from django.db.models import Count, Max
+from django.db.models import Count
from django.http import Http404, HttpResponse
-from django.shortcuts import get_object_or_404, redirect, render
+from django.shortcuts import get_object_or_404, render
from django.views.generic import DetailView, ListView
-from .models import (Architecture, BootType, Bootloader, ClockChoice,
- Filesystem, HardwareType, InstallType, Iso, IsoType, Module, Source,
- Test, Release)
+from .models import (Iso, Release)
from mirrors.models import MirrorUrl
-def standard_field(model, empty_label=None, help_text=None, required=True):
- return forms.ModelChoiceField(queryset=model.objects.all(),
- widget=forms.RadioSelect(), empty_label=empty_label,
- help_text=help_text, required=required)
-
-
-class TestForm(forms.ModelForm):
- iso = forms.ModelChoiceField(queryset=Iso.objects.filter(
- active=True).order_by('-id'))
- architecture = standard_field(Architecture)
- iso_type = standard_field(IsoType)
- boot_type = standard_field(BootType)
- hardware_type = standard_field(HardwareType)
- install_type = standard_field(InstallType)
- source = standard_field(Source)
- clock_choice = standard_field(ClockChoice)
- filesystem = standard_field(Filesystem,
- help_text="Verify /etc/fstab, `df -hT` output and commands like "
- "lvdisplay for special modules.")
- modules = forms.ModelMultipleChoiceField(queryset=Module.objects.all(),
- widget=forms.CheckboxSelectMultiple(), required=False)
- bootloader = standard_field(Bootloader,
- help_text="Verify that the entries in the bootloader config "
- "looks OK.")
- rollback_filesystem = standard_field(Filesystem,
- help_text="If you did a rollback followed by a new attempt to "
- "setup your blockdevices/filesystems, select which option you "
- "took here.",
- empty_label="N/A (did not rollback)", required=False)
- rollback_modules = forms.ModelMultipleChoiceField(
- queryset=Module.objects.all(),
- help_text="If you did a rollback followed by a new attempt to "
- "setup your blockdevices/filesystems, select which option you "
- "took here.",
- widget=forms.CheckboxSelectMultiple(), required=False)
- success = forms.BooleanField(
- help_text="Only check this if everything went fine. "
- "If you ran into problems please create a ticket on <a "
- "href=\"https://bugs.archlinux.org/index.php?project=6\">the "
- "bugtracker</a> (or check that one already exists) and link to "
- "it in the comments.",
- required=False)
- website = forms.CharField(label='',
- widget=forms.TextInput(attrs={'style': 'display:none;'}),
- required=False)
-
- class Meta:
- model = Test
- fields = ("user_name", "user_email", "iso", "architecture",
- "iso_type", "boot_type", "hardware_type",
- "install_type", "source", "clock_choice", "filesystem",
- "modules", "bootloader", "rollback_filesystem",
- "rollback_modules", "success", "comments")
- widgets = {
- "modules": forms.CheckboxSelectMultiple(),
- }
-
-
-def submit_test_result(request):
- if request.POST:
- form = TestForm(request.POST)
- if form.is_valid() and request.POST['website'] == '':
- test = form.save(commit=False)
- test.ip_address = request.META.get("REMOTE_ADDR", None)
- test.save()
- form.save_m2m()
- return redirect('releng-test-thanks')
- else:
- form = TestForm()
-
- context = {'form': form}
- return render(request, 'releng/add.html', context)
-
-
-def calculate_option_overview(field_name):
- field = Test._meta.get_field(field_name)
- model = field.rel.to
- is_rollback = field_name.startswith('rollback_')
- option = {
- 'option': model,
- 'field_name': field_name,
- 'name': model._meta.verbose_name,
- 'is_rollback': is_rollback,
- 'values': []
- }
- if not is_rollback:
- successes = dict(model.objects.values_list('pk').filter(
- test__success=True).annotate(latest=Max('test__iso__id')))
- failures = dict(model.objects.values_list('pk').filter(
- test__success=False).annotate(latest=Max('test__iso__id')))
- else:
- successes = dict(model.objects.values_list('pk').filter(
- rollback_test_set__success=True).annotate(
- latest=Max('rollback_test_set__iso__id')))
- failures = dict(model.objects.values_list('pk').filter(
- rollback_test_set__success=False).annotate(
- latest=Max('rollback_test_set__iso__id')))
-
- for value in model.objects.all():
- data = {
- 'value': value,
- 'success': successes.get(value.pk),
- 'failure': failures.get(value.pk),
- }
- option['values'].append(data)
-
- return option
-
-
-def options_fetch_iso(options):
- '''Replaces the Iso PK with a full Iso model object in a list of options
- used on the overview page. We do it this way to only have to query the Iso
- table once rather than once per option.'''
- # collect all necessary Iso PKs
- all_pks = set()
- for option in options:
- all_pks.update(v['success'] for v in option['values'])
- all_pks.update(v['failure'] for v in option['values'])
-
- all_pks.discard(None)
- all_isos = Iso.objects.in_bulk(all_pks)
-
- for option in options:
- for value in option['values']:
- value['success'] = all_isos.get(value['success'])
- value['failure'] = all_isos.get(value['failure'])
-
- return options
-
-
-def test_results_overview(request):
- # data structure produced:
- # [ {
- # option, name, is_rollback,
- # values: [ { value, success, failure } ... ]
- # }
- # ...
- # ]
- all_options = []
- fields = ['architecture', 'iso_type', 'boot_type', 'hardware_type',
- 'install_type', 'source', 'clock_choice', 'filesystem', 'modules',
- 'bootloader', 'rollback_filesystem', 'rollback_modules']
- for field in fields:
- all_options.append(calculate_option_overview(field))
-
- all_options = options_fetch_iso(all_options)
-
- context = {
- 'options': all_options,
- 'iso_url': settings.ISO_LIST_URL,
- }
- return render(request, 'releng/results.html', context)
-
-
-def test_results_iso(request, iso_id):
- iso = get_object_or_404(Iso, pk=iso_id)
- test_list = iso.test_set.select_related()
- context = {
- 'iso_name': iso.name,
- 'test_list': test_list
- }
- return render(request, 'releng/result_list.html', context)
-
-
-def test_results_for(request, option, value):
- if option not in Test._meta.get_all_field_names():
- raise Http404
- option_model = getattr(Test, option).field.rel.to
- option_model.verbose_name = option_model._meta.verbose_name
- real_value = get_object_or_404(option_model, pk=value)
- test_list = real_value.test_set.select_related().order_by(
- '-iso__name', '-pk')
- context = {
- 'option': option_model,
- 'value': real_value,
- 'value_id': value,
- 'test_list': test_list
- }
- return render(request, 'releng/result_list.html', context)
-
-
-def submit_test_thanks(request):
- return render(request, "releng/thanks.html", None)
-
def iso_overview(request):
isos = Iso.objects.all().order_by('-pk')