Merge "Eliminate eval from swagger.py in k8sclient"
This commit is contained in:
commit
c668d89230
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user