diff options
author | jelle van der Waa <jelle@vdwaa.nl> | 2018-01-29 20:09:55 +0100 |
---|---|---|
committer | Angel Velásquez <angvp@archlinux.org> | 2018-01-29 14:09:55 -0500 |
commit | 2ff2b26aa92c8efd21090562091361924a3a9428 (patch) | |
tree | 171281f5013048c225519cf759bff030b73391ca /releng | |
parent | f42f357fdf20d76bc5468ec227dac66cd0ca3ca8 (diff) | |
download | archweb-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.py | 11 | ||||
-rw-r--r-- | releng/models.py | 84 | ||||
-rw-r--r-- | releng/urls.py | 10 | ||||
-rw-r--r-- | releng/views.py | 194 |
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') |