in templates/python/facebook_business/typechecker.py [0:0]
def is_type(self, value_type, value, allow_dict_as_obj=True):
if value is None or value_type is None:
return True
if value_type in self._enum_data:
return value in self._enum_data[value_type]
if value_type == 'file':
return os.path.isfile(value)
if value_type == 'list':
return isinstance(value, list)
if isinstance(value, dict) and value_type in ['map', 'Object']:
return True
if isinstance(value, bool):
return value_type in ['bool']
if isinstance(value, six.string_types):
if value_type in ['string', 'unicode', 'file', 'datetime']:
return True
elif value_type == 'bool' and value in ['true', 'false']:
return True
elif value_type in ['int', 'unsigned int', 'float']:
return value.isdigit()
else:
return False
if isinstance(value, (int, float)):
return value_type in ['int', 'unsigned int', 'float', 'string', 'datetime']
if self.is_type_collection(value_type, 'list'):
if not isinstance(value, list):
return False
sub_type = self.get_type_from_collection(value_type, 'list')[0]
return all([self.is_type(sub_type, item) for item in value])
if self.is_type_collection(value_type, 'map'):
if not isinstance(value, dict):
return False
sub_types = self.get_type_from_collection(value_type, 'map')
sub_type_key = sub_types[0]
sub_type_value = sub_types[1]
return all([self.is_type(sub_type_key, k) and
self.is_type(sub_type_value, v) for k, v in value.items()])
if (type(value).__name__ == value_type or
hasattr(value, '_is' + value_type)):
return True
if allow_dict_as_obj and isinstance(value, dict):
return self._type_is_ad_object(value_type)
return False