move vars validation method into validators.py

This commit is contained in:
AlanCoding 2016-09-28 09:32:16 -04:00
parent 166053e0eb
commit 8036e294dd
2 changed files with 24 additions and 14 deletions

View File

@ -40,6 +40,7 @@ from awx.main.models import * # noqa
from awx.main.access import get_user_capabilities
from awx.main.fields import ImplicitRoleField
from awx.main.utils import get_type_for_model, get_model_for_type, build_url, timestamp_apiformat, camelcase_to_underscore, getattrd
from awx.main.validators import vars_validate_or_raise
from awx.conf.license import feature_enabled
from awx.api.fields import BooleanNullField, CharNullField, ChoiceNullField, EncryptedPasswordField, VerbatimField
@ -110,20 +111,6 @@ def reverse_gfk(content_object):
camelcase_to_underscore(content_object.__class__.__name__): content_object.get_absolute_url()
}
def vars_validate_or_raise(vars_str):
# vars must be blank, a valid JSON or YAML dict, or ...
try:
json.loads((vars_str or '').strip() or '{}')
return vars_str
except ValueError:
pass
try:
yaml.safe_load(vars_str)
return vars_str
except yaml.YAMLError:
pass
raise serializers.ValidationError('Must be valid JSON or YAML.')
class BaseSerializerMetaclass(serializers.SerializerMetaclass):
'''

View File

@ -4,11 +4,16 @@
# Python
import base64
import re
import yaml
import json
# Django
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError
# REST framework
from rest_framework.serializers import ValidationError as RestValidationError
def validate_pem(data, min_keys=0, max_keys=None, min_certs=0, max_certs=None):
"""
@ -166,3 +171,21 @@ def validate_ssh_private_key(data):
credential.
"""
return validate_pem(data, min_keys=1)
def vars_validate_or_raise(vars_str):
"""
Validate that fields like extra_vars or variables on resources like
job templates, inventories, or hosts are either an acceptable
blank string, or are valid JSON or YAML dict
"""
try:
json.loads((vars_str or '').strip() or '{}')
return vars_str
except ValueError:
pass
try:
yaml.safe_load(vars_str)
return vars_str
except yaml.YAMLError:
pass
raise RestValidationError('Must be valid JSON or YAML.')