From bfe6afcd7ac5ae7b6f07caa7b02a33fec710ebda Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 28 Apr 2011 17:58:13 -0500 Subject: Rename isotests to releng Signed-off-by: Dan McGee --- releng/views.py | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 releng/views.py (limited to 'releng/views.py') diff --git a/releng/views.py b/releng/views.py new file mode 100644 index 00000000..5cffb2f5 --- /dev/null +++ b/releng/views.py @@ -0,0 +1,132 @@ +from django import forms +from django.conf import settings +from django.http import Http404 +from django.shortcuts import get_object_or_404, redirect +from django.views.generic.simple import direct_to_template + +from .models import (Architecture, BootType, Bootloader, ClockChoice, + Filesystem, HardwareType, InstallType, Iso, IsoType, Module, Source, + Test) + +def standard_field(model, help_text=None): + return forms.ModelChoiceField(queryset=model.objects.all(), + widget=forms.RadioSelect(), empty_label=None, help_text=help_text) + +class TestForm(forms.ModelForm): + iso = forms.ModelChoiceField(queryset=Iso.objects.filter(active=True)) + 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="Check the installed system, including fstab.") + modules = forms.ModelMultipleChoiceField(queryset=Module.objects.all(), + help_text="", widget=forms.CheckboxSelectMultiple(), required=False) + bootloader = standard_field(Bootloader) + rollback_filesystem = forms.ModelChoiceField(queryset=Filesystem.objects.all(), + help_text="If you did a rollback followed by a new attempt to setup " \ + "your lockdevices/filesystems, select which option you took here.", + widget=forms.RadioSelect(), required=False) + rollback_modules = forms.ModelMultipleChoiceField(queryset=Module.objects.all(), + help_text="If you did a rollback followed b a new attempt to setup " \ + "your lockdevices/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 you ran into any errors please specify them 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() + return redirect('releng-test-thanks') + else: + form = TestForm() + + context = {'form': form} + return direct_to_template(request, 'releng/add.html', context) + +def calculate_option_overview(model, is_rollback=False): + option = { + 'option': model, + 'name': model._meta.verbose_name, + 'is_rollback': is_rollback, + 'values': [] + } + for value in model.objects.all(): + data = { 'value': value } + if is_rollback: + data['success'] = value.get_last_rollback_success() + data['failure'] = value.get_last_rollback_failure() + else: + data['success'] = value.get_last_success() + data['failure'] = value.get_last_failure() + option['values'].append(data) + + return option + +def test_results_overview(request): + # data structure produced: + # [ { option, name, is_rollback, values: [ { value, success, failure } ... ] } ... ] + all_options = [] + models = [ Architecture, IsoType, BootType, HardwareType, InstallType, + Source, ClockChoice, Filesystem, Module, Bootloader ] + for model in models: + all_options.append(calculate_option_overview(model)) + # now handle rollback options + for model in [ Filesystem, Module ]: + all_options.append(calculate_option_overview(model, True)) + + print all_options + context = { + 'options': all_options, + 'iso_url': settings.ISO_LIST_URL, + } + return direct_to_template(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.all() + context = { + 'iso_name': iso.name, + 'test_list': test_list + } + return direct_to_template(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 + real_value = get_object_or_404(option_model, pk=value) + test_list = real_value.test_set.order_by("iso__name", "pk") + context = { + 'option': option, + 'value': real_value, + 'value_id': value, + 'test_list': test_list + } + return direct_to_template(request, 'releng/result_list.html', context) + +def submit_test_thanks(request): + return direct_to_template(request, "releng/thanks.html", None) + +# vim: set ts=4 sw=4 et: -- cgit v1.2.3-2-g168b From 1ab065a982f489368b88ae67ec2997ed2777519a Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 29 Apr 2011 09:31:16 -0500 Subject: releng: enhance admin, remove errant print statement Signed-off-by: Dan McGee --- releng/views.py | 1 - 1 file changed, 1 deletion(-) (limited to 'releng/views.py') diff --git a/releng/views.py b/releng/views.py index 5cffb2f5..973cf330 100644 --- a/releng/views.py +++ b/releng/views.py @@ -96,7 +96,6 @@ def test_results_overview(request): for model in [ Filesystem, Module ]: all_options.append(calculate_option_overview(model, True)) - print all_options context = { 'options': all_options, 'iso_url': settings.ISO_LIST_URL, -- cgit v1.2.3-2-g168b From abb3ae1502ea66d93d1d12487b195a6c6b8de35b Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Fri, 29 Apr 2011 09:33:30 -0500 Subject: releng: make rollback fs a standard_option Signed-off-by: Dan McGee --- releng/views.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'releng/views.py') diff --git a/releng/views.py b/releng/views.py index 973cf330..f23869f7 100644 --- a/releng/views.py +++ b/releng/views.py @@ -8,9 +8,10 @@ from .models import (Architecture, BootType, Bootloader, ClockChoice, Filesystem, HardwareType, InstallType, Iso, IsoType, Module, Source, Test) -def standard_field(model, help_text=None): +def standard_field(model, help_text=None, required=True): return forms.ModelChoiceField(queryset=model.objects.all(), - widget=forms.RadioSelect(), empty_label=None, help_text=help_text) + widget=forms.RadioSelect(), empty_label=None, help_text=help_text, + required=required) class TestForm(forms.ModelForm): iso = forms.ModelChoiceField(queryset=Iso.objects.filter(active=True)) @@ -26,10 +27,10 @@ class TestForm(forms.ModelForm): modules = forms.ModelMultipleChoiceField(queryset=Module.objects.all(), help_text="", widget=forms.CheckboxSelectMultiple(), required=False) bootloader = standard_field(Bootloader) - rollback_filesystem = forms.ModelChoiceField(queryset=Filesystem.objects.all(), + rollback_filesystem = standard_field(Filesystem, help_text="If you did a rollback followed by a new attempt to setup " \ "your lockdevices/filesystems, select which option you took here.", - widget=forms.RadioSelect(), required=False) + required=False) rollback_modules = forms.ModelMultipleChoiceField(queryset=Module.objects.all(), help_text="If you did a rollback followed b a new attempt to setup " \ "your lockdevices/filesystems, select which option you took here.", -- cgit v1.2.3-2-g168b From 2d02bf77196b830f3c0022306188147f998afe0b Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Mon, 2 May 2011 11:18:39 -0500 Subject: releng: fix FS#24021, allow unselection of rollback FS Signed-off-by: Dan McGee --- releng/views.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'releng/views.py') diff --git a/releng/views.py b/releng/views.py index f23869f7..f3c48cc1 100644 --- a/releng/views.py +++ b/releng/views.py @@ -8,10 +8,10 @@ from .models import (Architecture, BootType, Bootloader, ClockChoice, Filesystem, HardwareType, InstallType, Iso, IsoType, Module, Source, Test) -def standard_field(model, help_text=None, required=True): +def standard_field(model, empty_label=None, help_text=None, required=True): return forms.ModelChoiceField(queryset=model.objects.all(), - widget=forms.RadioSelect(), empty_label=None, help_text=help_text, - required=required) + 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)) @@ -30,7 +30,7 @@ class TestForm(forms.ModelForm): rollback_filesystem = standard_field(Filesystem, help_text="If you did a rollback followed by a new attempt to setup " \ "your lockdevices/filesystems, select which option you took here.", - required=False) + 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 b a new attempt to setup " \ "your lockdevices/filesystems, select which option you took here.", -- cgit v1.2.3-2-g168b From 5a417bd7e24e1001a6219c18dac1e2a424982b65 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Mon, 2 May 2011 11:25:40 -0500 Subject: releng: ensure we save M2M values from submission form Whoops- forgot to add this rather important call back in here when I made the form not auto-commit. Fixes FS#24019. Signed-off-by: Dan McGee --- releng/views.py | 1 + 1 file changed, 1 insertion(+) (limited to 'releng/views.py') diff --git a/releng/views.py b/releng/views.py index f3c48cc1..ae9c8682 100644 --- a/releng/views.py +++ b/releng/views.py @@ -59,6 +59,7 @@ def submit_test_result(request): 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() -- cgit v1.2.3-2-g168b From 03bc3e619f311e11323be5bfce57ebd0842e6595 Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Sun, 8 May 2011 18:02:55 +0200 Subject: releng: clarify some text and options Signed-off-by: Dieter Plaetinck Signed-off-by: Dan McGee --- releng/views.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'releng/views.py') diff --git a/releng/views.py b/releng/views.py index ae9c8682..70aaaf52 100644 --- a/releng/views.py +++ b/releng/views.py @@ -23,10 +23,12 @@ class TestForm(forms.ModelForm): source = standard_field(Source) clock_choice = standard_field(ClockChoice) filesystem = standard_field(Filesystem, - help_text="Check the installed system, including fstab.") + help_text="verify /etc/fstab, `df -hT` output and commands like " \ + "lvdisplay for special modules") modules = forms.ModelMultipleChoiceField(queryset=Module.objects.all(), help_text="", widget=forms.CheckboxSelectMultiple(), required=False) - bootloader = standard_field(Bootloader) + bootloader = standard_field(Bootloader, + help_text="Verify that the entries in the bootloader config look ok") rollback_filesystem = standard_field(Filesystem, help_text="If you did a rollback followed by a new attempt to setup " \ "your lockdevices/filesystems, select which option you took here.", -- cgit v1.2.3-2-g168b From 9881ba5c238edbaec3b9c6f38b00a6a39ff168b4 Mon Sep 17 00:00:00 2001 From: Dieter Plaetinck Date: Sun, 8 May 2011 18:02:56 +0200 Subject: releng: fix typos Signed-off-by: Dieter Plaetinck Signed-off-by: Dan McGee --- releng/views.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'releng/views.py') diff --git a/releng/views.py b/releng/views.py index 70aaaf52..0f81948c 100644 --- a/releng/views.py +++ b/releng/views.py @@ -31,11 +31,11 @@ class TestForm(forms.ModelForm): help_text="Verify that the entries in the bootloader config look ok") rollback_filesystem = standard_field(Filesystem, help_text="If you did a rollback followed by a new attempt to setup " \ - "your lockdevices/filesystems, select which option you took here.", + "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 b a new attempt to setup " \ - "your lockdevices/filesystems, select which option you took here.", + 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 you ran into any errors please specify them in the " \ -- cgit v1.2.3-2-g168b From 972b010743e5e8844fda8e9862c85289541eb621 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 10 May 2011 14:38:37 -0500 Subject: Ensure releng modules links work correctly Signed-off-by: Dan McGee --- releng/views.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'releng/views.py') diff --git a/releng/views.py b/releng/views.py index 0f81948c..a810bbbc 100644 --- a/releng/views.py +++ b/releng/views.py @@ -69,10 +69,13 @@ def submit_test_result(request): context = {'form': form} return direct_to_template(request, 'releng/add.html', context) -def calculate_option_overview(model, is_rollback=False): +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, - 'name': model._meta.verbose_name, + 'name': field_name, 'is_rollback': is_rollback, 'values': [] } @@ -92,13 +95,11 @@ def test_results_overview(request): # data structure produced: # [ { option, name, is_rollback, values: [ { value, success, failure } ... ] } ... ] all_options = [] - models = [ Architecture, IsoType, BootType, HardwareType, InstallType, - Source, ClockChoice, Filesystem, Module, Bootloader ] - for model in models: - all_options.append(calculate_option_overview(model)) - # now handle rollback options - for model in [ Filesystem, Module ]: - all_options.append(calculate_option_overview(model, True)) + 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)) context = { 'options': all_options, -- cgit v1.2.3-2-g168b From 2261cf40bc5e4a43cc8c1618eb54267da8805f89 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Thu, 12 May 2011 10:33:46 -0500 Subject: Put most recent ISOs first in lists Signed-off-by: Dan McGee --- releng/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'releng/views.py') diff --git a/releng/views.py b/releng/views.py index a810bbbc..3180a9ed 100644 --- a/releng/views.py +++ b/releng/views.py @@ -14,7 +14,8 @@ def standard_field(model, empty_label=None, help_text=None, required=True): help_text=help_text, required=required) class TestForm(forms.ModelForm): - iso = forms.ModelChoiceField(queryset=Iso.objects.filter(active=True)) + 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) @@ -121,7 +122,7 @@ def test_results_for(request, option, value): raise Http404 option_model = getattr(Test, option).field.rel.to real_value = get_object_or_404(option_model, pk=value) - test_list = real_value.test_set.order_by("iso__name", "pk") + test_list = real_value.test_set.order_by('-iso__name', '-pk') context = { 'option': option, 'value': real_value, -- cgit v1.2.3-2-g168b