def get_typed_value()

in 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