Merge pull request #109 from danieldupriest/policy-error-handling

Policy error handling implemented
This commit is contained in:
Daniel Dupriest 2019-03-03 01:08:52 -08:00 committed by GitHub
commit 05f29b3584
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 36 additions and 30 deletions

View file

@ -1,4 +1,4 @@
# Generated by Django 2.1.7 on 2019-03-03 08:55 # Generated by Django 2.1.7 on 2019-03-03 09:06
import datetime import datetime
from django.db import migrations, models from django.db import migrations, models

View file

@ -1,4 +1,4 @@
# Generated by Django 2.1.7 on 2019-03-03 08:55 # Generated by Django 2.1.7 on 2019-03-03 09:06
from django.conf import settings from django.conf import settings
from django.db import migrations, models from django.db import migrations, models

View file

@ -53,19 +53,22 @@ def get_sections(r_id):
data.update(get_fields(i.id)) data.update(get_fields(i.id))
# process rules from the policy file if the section is completed # process rules from the policy file if the section is completed
if i.completed and not i.approved: if i.completed and not i.approved:
rules = pol.sections[index].rules try:
for rule in rules: rules = pol.sections[index].rules
try: for rule in rules:
named_fields = generate_named_fields_for_section(data['fields']) try:
result = rule['rule'](data, named_fields) named_fields = generate_named_fields_for_section(data['fields'])
if not result is None: result = rule['rule'](data, named_fields)
info = { if not result is None:
"label": rule['title'], info = {
"rule_break_text": result, "label": rule['title'],
} "rule_break_text": result,
data['rule_violations'].append(info) }
except Exception as e: data['rule_violations'].append(info)
print('Rule "{}" encountered an error. {}'.format(rule['title'], e)) except Exception as e:
print('Rule "{}" encountered an error. {}'.format(rule['title'], e))
except Exception as e:
print('Error accessing policy section {}. Policy file may have changed.'.format(index))
# append section to the array # append section to the array
section_set["sections"].append(data.copy()) section_set["sections"].append(data.copy())
@ -345,19 +348,22 @@ def section(request, report_pk, section_pk):
data.update(get_fields(s.id)) data.update(get_fields(s.id))
# process rules from the policy file if the section is completed # process rules from the policy file if the section is completed
if s.completed and not s.approved: if s.completed and not s.approved:
rules = pol.sections[s.number].rules try:
for rule in rules: rules = pol.sections[s.number].rules
try: for rule in rules:
named_fields = generate_named_fields_for_section(data['fields']) try:
result = rule['rule'](data, named_fields) named_fields = generate_named_fields_for_section(data['fields'])
if not result is None: result = rule['rule'](data, named_fields)
info = { if not result is None:
"label": rule['title'], info = {
"rule_break_text": result, "label": rule['title'],
} "rule_break_text": result,
data['rule_violations'].append(info) }
except Exception as e: data['rule_violations'].append(info)
print('Rule "{}" encountered an error. {}'.format(rule['title'], e)) except Exception as e:
print('Rule "{}" encountered an error. {}'.format(rule['title'], e))
except Exception as e:
print('Error accessing policy section {}. Policy file may have been changed.'.format(s.number))
return JsonResponse(data) return JsonResponse(data)
def section_complete(section_pk): def section_complete(section_pk):

Binary file not shown.

View file

@ -1,4 +1,4 @@
# Generated by Django 2.1.7 on 2019-03-03 08:55 # Generated by Django 2.1.7 on 2019-03-03 09:06
import django.contrib.auth.models import django.contrib.auth.models
import django.contrib.auth.validators import django.contrib.auth.validators
@ -34,9 +34,9 @@ class Migration(migrations.Migration):
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
], ],
options={ options={
'verbose_name_plural': 'users',
'verbose_name': 'user', 'verbose_name': 'user',
'abstract': False, 'abstract': False,
'verbose_name_plural': 'users',
}, },
managers=[ managers=[
('objects', django.contrib.auth.models.UserManager()), ('objects', django.contrib.auth.models.UserManager()),