in templates/python/facebook_business/typechecker.py [0:0]
def get_typed_value(self, key, value):
if not self.is_valid_key(key):
return value
field_type = self.get_type(key)
if self.is_type(field_type, value, allow_dict_as_obj=False):
return value
if self.is_primitive_type(field_type) and isinstance(value, six.text_type):
typed_value = self.convert_string_to_prim_type(field_type, value)
elif self.is_type_collection(field_type, "list"):
sub_type = self.get_type_from_collection(field_type, "list")[0]
if isinstance(value, list):
typed_value = [self.get_typed_value(sub_type, v) for v in value]
else:
typed_value = [self.get_typed_value(sub_type, value)]
elif self.is_type_collection(field_type, "map"):
sub_types = self.get_type_from_collection(field_type, "map")
if len(sub_types) == 2:
sub_type_key = sub_types[0]
sub_type_value = sub_types[1]
else:
sub_type_key = 'string'
sub_type_value = sub_types[0]
typed_value = dict(
(self.get_typed_value(sub_type_key, k),
self.get_typed_value(sub_type_value, v))
for (k, v) in value.items()
)
elif isinstance(value, dict):
try:
typed_value = self._create_field_object(field_type, value)
except:
typed_value = value
else:
typed_value = value
if not self.is_type(field_type, typed_value):
api_utils.warning('Value of ' + key + ' is not be compatible.' +
' Expect ' + field_type + '; got ' + str(type(typed_value)))
return typed_value