diff options
author | Filipp Lepalaan <filipp@mac.com> | 2015-10-13 22:43:45 +0300 |
---|---|---|
committer | Filipp Lepalaan <filipp@mac.com> | 2015-10-13 22:43:45 +0300 |
commit | e9b0f10c534c10b239301a58f8c00a4effe9adbf (patch) | |
tree | 0e5f1c844e204743b906e4c00c21fc5489b985c7 /servo/views/diagnostics.py | |
parent | 5d5415d29daa990d27913da638a6e2bc30afb4e8 (diff) | |
download | Servo-e9b0f10c534c10b239301a58f8c00a4effe9adbf.tar.gz Servo-e9b0f10c534c10b239301a58f8c00a4effe9adbf.tar.bz2 Servo-e9b0f10c534c10b239301a58f8c00a4effe9adbf.zip |
AST 2fixes
Diffstat (limited to 'servo/views/diagnostics.py')
-rw-r--r-- | servo/views/diagnostics.py | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/servo/views/diagnostics.py b/servo/views/diagnostics.py new file mode 100644 index 0000000..5e2d222 --- /dev/null +++ b/servo/views/diagnostics.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +import gsxws + +from django.db.models import Q +from django.contrib import messages + +from django.core.cache import cache +from django.utils.translation import ugettext as _ +from django.shortcuts import render, redirect, get_object_or_404 + + +from servo.models import Device, Order, Product, GsxAccount, ServiceOrderItem + + +class RepairDiagnosticResults: + pass + + +class DiagnosticResults(object): + def __init__(self, diags): + if not diags.diagnosticTestData: + raise gsxws.GsxError('Missing diagnostic data') + + self.diags = dict(result={}, profile={}, report={}) + + for r in diags.diagnosticTestData.testResult.result: + self.diags['result'][r.name] = r.value + + for r in diags.diagnosticProfileData.profile.unit.key: + self.diags['profile'][r.name] = r.value + + for r in diags.diagnosticProfileData.report.reportData.key: + self.diags['report'][r.name] = r.value + + def __iter__(self): + return iter(self.diags) + + +def run_test(request, device, test_id): + device = get_object_or_404(Device, pk=device) + try: + device.run_test(test_id, request) + except Exception as e: + messages.error(request, e) + + +def select_test(request, pk): + """ + Fetch test suite selector + """ + error = None + device = get_object_or_404(Device, pk=pk) + + try: + tests = device.fetch_tests(request) + except Exception as e: + error = e + + return render(request, "diagnostics/select_test.html", locals()) + + +def diagnostics(request, pk): + """ + Fetches MRI diagnostics or initiates iOS diags from GSX + """ + device = get_object_or_404(Device, pk=pk) + + if request.GET.get('a') == 'init': + if request.method == 'POST': + from gsxws import diagnostics + order = request.POST.get('order') + order = device.order_set.get(pk=order) + email = request.POST.get('email') + diag = diagnostics.Diagnostics(serialNumber=device.sn) + diag.emailAddress = email + diag.shipTo = order.location.gsx_shipto + + try: + GsxAccount.default(request.user) + res = diag.initiate() + msg = _('Diagnostics initiated - diags://%s') % res + order.notify("init_diags", msg, request.user) + messages.success(request, msg) + except gsxws.GsxError as e: + messages.error(request, e) + + return redirect(order) + + order = request.GET.get('order') + order = device.order_set.get(pk=order) + customer = order.customer + url = request.path + return render(request, "devices/diagnostic_init.html", locals()) + + if request.GET.get('a') == 'get': + try: + diagnostics = device.get_diagnostics(request.user) + if device.is_ios(): + diagnostics = DiagnosticResults(diagnostics) + return render(request, "devices/diagnostic_ios.html", locals()) + return render(request, "devices/diagnostic_results.html", locals()) + except gsxws.GsxError as e: + return render(request, "devices/diagnostic_error.html", {'error': e}) + + return render(request, "devices/diagnostics.html", locals()) |