From 59027f975e5a1b6e5b3148889f140cf163d9adb5 Mon Sep 17 00:00:00 2001 From: "Chris J. Karr" Date: Fri, 12 May 2017 04:52:18 +0000 Subject: [PATCH] Django 1.11 fixes. * Fixes for empty site installs. --- models.py | 6 ++++ templatetags/purple_robot.py | 33 +++++++++++------ views.py | 69 +++++++++++++++++++++--------------- 3 files changed, 69 insertions(+), 39 deletions(-) diff --git a/models.py b/models.py index 3e1de5f..dd8673f 100644 --- a/models.py +++ b/models.py @@ -392,6 +392,9 @@ def last_upload(self): def last_upload_status(self): upload = self.last_upload() + if upload is None: + return "danger" + now = timezone.now() diff = now - upload @@ -406,6 +409,9 @@ def last_upload_status(self): def config_last_fetched_status(self): upload = self.config_last_fetched + if upload is None: + return "danger" + now = timezone.now() diff = now - upload diff --git a/templatetags/purple_robot.py b/templatetags/purple_robot.py index ae9a7c7..c8ae8fe 100644 --- a/templatetags/purple_robot.py +++ b/templatetags/purple_robot.py @@ -30,7 +30,8 @@ def render(self, context): except AttributeError: pass - return render_to_string('tag_pr_device_custom_sidebar_unknown.html') + return render_to_string('tag_pr_device_custom_sidebar_unknown.html', \ + context=context.flatten(), request=context.request) @register.tag(name="pr_device_custom_navbar") @@ -48,7 +49,8 @@ def render(self, context): except AttributeError: pass - return render_to_string('tag_pr_device_custom_navbar_default.html', context) + return render_to_string('tag_pr_device_custom_navbar_default.html', \ + context=context.flatten(), request=context.request) @register.tag(name="pr_home_custom_console") @@ -66,7 +68,8 @@ def render(self, context): except AttributeError: pass - return render_to_string('tag_pr_home_custom_console_unknown.html') + return render_to_string('tag_pr_home_custom_console_unknown.html', \ + context=context.flatten(), request=context.request) @register.tag(name="pr_device_custom_console") @@ -84,7 +87,8 @@ def render(self, context): except AttributeError: pass - return render_to_string('tag_pr_device_custom_console_unknown.html') + return render_to_string('tag_pr_device_custom_console_unknown.html', \ + context=context.flatten(), request=context.request) @register.tag(name="pr_group_table") @@ -112,7 +116,8 @@ def render(self, context): else: context['device_group_devices'] = list(PurpleRobotDevice.objects.filter(device_group=None).order_by('name', 'device_id')) # pylint: disable=line-too-long - return render_to_string('tag_pr_group_table.html', context) + return render_to_string('tag_pr_group_table.html', context=context.flatten(), \ + request=context.request) @register.tag(name="pr_timestamp_ago") @@ -157,7 +162,8 @@ def render(self, context): context['ago'] = ago_str context['date'] = date_obj - return render_to_string('tag_pr_date_ago.html', context) + return render_to_string('tag_pr_date_ago.html', context=context.flatten(), \ + request=context.request) @register.tag(name="pr_date_ago") @@ -200,7 +206,8 @@ def render(self, context): context['ago'] = ago_str context['date'] = date_obj - return render_to_string('tag_pr_date_ago.html', context) + return render_to_string('tag_pr_date_ago.html', context=context.flatten(), \ + request=context.request) @register.tag(name="pr_human_duration") @@ -236,7 +243,8 @@ def render(self, context): context['human_duration'] = ago_str context['seconds'] = seconds_obj - return render_to_string('tag_pr_human_duration.html', context) + return render_to_string('tag_pr_human_duration.html', context=context.flatten(), \ + request=context.request) @register.tag(name="pr_frequency") @@ -292,7 +300,8 @@ def render(self, context): context['value'] = value context['tooltip'] = tooltip - return render_to_string('tag_pr_frequency.html', context) + return render_to_string('tag_pr_frequency.html', context=context.flatten(), \ + request=context.request) @register.tag(name="pr_device_alerts") @@ -320,7 +329,8 @@ def render(self, context): context['value'] = 0 context['tooltip'] = 'No alerts.' - return render_to_string('tag_pr_device_alerts.html', context) + return render_to_string('tag_pr_device_alerts.html', context=context.flatten(), \ + request=context.request) alerts = PurpleRobotAlert.objects.filter(user_id=user_id, dismissed=None).order_by('-severity') # pylint: disable=line-too-long @@ -350,7 +360,8 @@ def render(self, context): context['value'] = alerts.count() context['tooltip'] = tooltip - return render_to_string('tag_pr_device_alerts.html', context) + return render_to_string('tag_pr_device_alerts.html', context=context.flatten(), \ + request=context.request) @register.tag(name="pr_data_size") diff --git a/views.py b/views.py index 0e6e20e..bd5f58c 100644 --- a/views.py +++ b/views.py @@ -13,8 +13,7 @@ from django.contrib.admin.views.decorators import staff_member_required from django.core.urlresolvers import reverse from django.http import HttpResponse, UnreadablePostError -from django.shortcuts import render_to_response, get_object_or_404, redirect -from django.template import RequestContext +from django.shortcuts import render, get_object_or_404, redirect from django.utils import timezone from django.views.decorators.cache import never_cache from django.views.decorators.csrf import csrf_exempt @@ -199,17 +198,17 @@ def log_event(request): @staff_member_required @never_cache def test_report(request, slug): - context = RequestContext(request) + context = {} context['test'] = get_object_or_404(PurpleRobotTest, slug=slug) - return render_to_response('purple_robot_test.html', context) + return render(request, 'purple_robot_test.html', context) @staff_member_required @never_cache def tests_by_user(request, user_id): - context = RequestContext(request) + context = {} context['tests'] = PurpleRobotTest.objects.filter(user_id=user_id) context['user_id'] = user_id @@ -220,13 +219,13 @@ def tests_by_user(request, user_id): if test.active and test.passes() is False: context['success'] = False - return render_to_response('purple_robot_tests.html', context) + return render(request, 'purple_robot_tests.html', context) @staff_member_required @never_cache def tests_all(request): - context = RequestContext(request) + context = {} context['tests'] = PurpleRobotTest.objects.order_by('-last_updated') context['user_id'] = 'All' @@ -237,18 +236,18 @@ def tests_all(request): if test.active and test.passes() is False: context['success'] = False - return render_to_response('purple_robot_tests.html', context) + return render(request, 'purple_robot_tests.html', context) @staff_member_required @never_cache def pr_home(request): - context = RequestContext(request) + context = {} context['device_groups'] = PurpleRobotDeviceGroup.objects.all() context['unattached_devices'] = PurpleRobotDevice.objects.filter(device_group=None) - return render_to_response('purple_robot_home.html', context) + return render(request, 'purple_robot_home.html', context) @staff_member_required @@ -268,13 +267,13 @@ def pr_device(request, device_id): # pylint: disable=unused-argument except KeyError: context['pr_show_notes'] = True - return render_to_response('purple_robot_device.html', context) + return render(request, 'purple_robot_device.html', context) @staff_member_required @never_cache def pr_device_probe(request, device_id, probe_name): - context = RequestContext(request) + context = {} context['device'] = PurpleRobotDevice.objects.get(device_id=device_id) context['probe_name'] = probe_name @@ -294,13 +293,13 @@ def pr_device_probe(request, device_id, probe_name): except KeyError: context['pr_show_notes'] = True - return render_to_response('purple_robot_device_probe.html', context) + return render(request, 'purple_robot_device_probe.html', context) @staff_member_required @never_cache def pr_by_probe(request): # pylint: disable=unused-argument - return render_to_response('purple_robot_probe.html') + return render(request, 'purple_robot_probe.html') @staff_member_required @@ -323,10 +322,10 @@ def pr_by_user(request): users[user_id] = user_dict - context = RequestContext(request) + context = {} context['users'] = users - return render_to_response('purple_robot_user.html', context) + return render(request, 'purple_robot_user.html', context) @staff_member_required @@ -433,7 +432,7 @@ def fetch_export_file(request, job_pk): # pylint: disable=unused-argument @staff_member_required @never_cache def create_export_job(request): - context = RequestContext(request) + context = {} context['form'] = ExportJobForm() @@ -471,7 +470,7 @@ def create_export_job(request): else: context['form'] = form - return render_to_response('purple_robot_export.html', context) + return render(request, 'purple_robot_export.html', context) @staff_member_required @@ -550,7 +549,7 @@ def pr_configurations(request): # pylint: disable=unused-argument context['configurations'] = PurpleRobotConfiguration.objects.all() - return render_to_response('purple_robot_configurations.html', context) + return render(request, 'purple_robot_configurations.html', context) @staff_member_required @@ -560,7 +559,7 @@ def pr_configuration(request, config_id): # pylint: disable=unused-argument context['config'] = get_object_or_404(PurpleRobotConfiguration, slug=config_id) - return render_to_response('purple_robot_configuration.html', context) + return render(request, 'purple_robot_configuration.html', context) @staff_member_required @@ -599,7 +598,7 @@ def pr_add_note(request): @never_cache -def pr_status(request): # pylint: disable=unused-argument, too-many-branches, too-many-statements +def pr_status(request): # pylint: disable=unused-argument, too-many-branches, too-many-statements, too-many-locals context = {} context['server_performance'] = fetch_performance_samples('system', 'server_performance') @@ -617,7 +616,12 @@ def pr_status(request): # pylint: disable=unused-argument, too-many-branches, to context['pending_mirror_ages'] = fetch_performance_samples('system', 'pending_mirror_ages') context['pending_ingest_ages'] = fetch_performance_samples('system', 'pending_ingest_ages') - context['payload_uploads'] = fetch_performance_samples('system', 'payload_uploads')[-1]['counts'] + samples = fetch_performance_samples('system', 'payload_uploads') + + context['payload_uploads'] = [] + + if samples: + context['payload_uploads'] = samples[-1]['counts'] context['timezone'] = settings.TIME_ZONE @@ -629,7 +633,10 @@ def pr_status(request): # pylint: disable=unused-argument, too-many-branches, to week_ago = timezone.now() - datetime.timedelta(days=7) - upload_seconds = (arrow.get(context['uploads_today'][-1]['sample_date']).datetime.astimezone(here_tz) - start_today).total_seconds() + upload_seconds = 0 + + if context['uploads_today']: + upload_seconds = (arrow.get(context['uploads_today'][-1]['sample_date']).datetime.astimezone(here_tz) - start_today).total_seconds() context['now'] = now context['start_today'] = start_today @@ -644,7 +651,10 @@ def pr_status(request): # pylint: disable=unused-argument, too-many-branches, to context['upload_seconds'] = upload_seconds context['uploads_today'] = arrow.get(context['uploads_today'][-1]['sample_date']).datetime.astimezone(here_tz) # c['uploads_today'][-1]['sample_date'] - upload_seconds = (arrow.get(context['uploads_hour'][-1]['sample_date']).datetime.astimezone(here_tz) - start_hour).total_seconds() + upload_seconds = 0 + + if context['uploads_hour']: + upload_seconds = (arrow.get(context['uploads_hour'][-1]['sample_date']).datetime.astimezone(here_tz) - start_hour).total_seconds() context['upload_hour_count'] = '-' context['upload_hour_rate'] = '-' @@ -679,8 +689,11 @@ def pr_status(request): # pylint: disable=unused-argument, too-many-branches, to if arrow.get(item['sample_date']).datetime >= start_hour: hour_items.append(item['num_extracted'] / (item['extraction_time'] + item['query_time'])) - context['ingest_average_day'] = numpy.mean(day_items) - context['ingest_average_hour'] = numpy.mean(hour_items) + if day_items: + context['ingest_average_day'] = numpy.mean(day_items) + + if hour_items: + context['ingest_average_hour'] = numpy.mean(hour_items) day_items = [] hour_items = [] @@ -698,7 +711,7 @@ def pr_status(request): # pylint: disable=unused-argument, too-many-branches, to if hour_items: context['mirror_average_hour'] = numpy.mean(hour_items) - return render_to_response('purple_robot_status.html', context) + return render(request, 'purple_robot_status.html', context) @staff_member_required @@ -717,4 +730,4 @@ def pr_users(request): # pylint: disable=unused-argument context['phantoms'] = phantoms - return render_to_response('purple_robot_users.html', context) + return render(request, 'purple_robot_users.html', context)