Merge "Eliminate eval from swagger.py in k8sclient"

This commit is contained in:
Jenkins 2015-06-22 03:08:28 +00:00 committed by Gerrit Code Review
commit c668d89230

View File

@ -19,7 +19,8 @@ server communication, and is invariant across implementations. Specifics of
the methods and models for each application are generated from the Swagger the methods and models for each application are generated from the Swagger
templates.""" templates."""
import ast import __builtin__
import sys import sys
import os import os
import re import re
@ -33,7 +34,8 @@ import random
import string import string
from magnum.common import utils from magnum.common import utils
from models import *
from oslo_utils import importutils
class ApiClient(object): class ApiClient(object):
@ -223,23 +225,29 @@ class ApiClient(object):
subClass = match.group(1) subClass = match.group(1)
return [self.deserialize(subObj, subClass) for subObj in obj] return [self.deserialize(subObj, subClass) for subObj in obj]
if (objClass in ['int', 'float', 'long', 'dict', 'list', 'str', 'bool', 'datetime']): classname = objClass
objClass = ast.literal_eval(objClass) if classname in {'int', 'float', 'long', 'dict', 'list', 'str', 'bool'}:
objClass = getattr(__builtin__, classname)
elif classname == 'datetime':
objClass = self.__parse_string_to_datetime
else: # not a native type, must be model class else: # not a native type, must be model class
objClass = ast.literal_eval(objClass + '.' + objClass) model = ('magnum.common.pythonk8sclient.client.models.%s.%s' %
(classname, classname))
objClass = importutils.import_class(model)
else:
classname = None
if objClass in [int, long, float, dict, list, str, bool]: if ((getattr(objClass, '__module__', None) == __builtin__.__name__) or
(classname == 'datetime')):
return objClass(obj) return objClass(obj)
elif objClass == datetime:
return self.__parse_string_to_datetime(obj)
instance = objClass() instance = objClass()
for attr, attrType in instance.swaggerTypes.iteritems(): for attr, attrType in instance.swaggerTypes.iteritems():
if obj is not None and instance.attributeMap[attr] in obj and type(obj) in [list, dict]: if obj is not None and instance.attributeMap[attr] in obj and type(obj) in [list, dict]:
value = obj[instance.attributeMap[attr]] value = obj[instance.attributeMap[attr]]
if attrType in ['str', 'int', 'long', 'float', 'bool']: if attrType in {'str', 'int', 'long', 'float', 'bool'}:
attrType = ast.literal_eval(attrType) attrType = getattr(__builtin__, attrType)
try: try:
value = attrType(value) value = attrType(value)
except UnicodeEncodeError: except UnicodeEncodeError: