def wrapper(*args, **kwargs): new_args = [] for arg in args: if isinstance(arg, str): # when a json was supplied, we deserialize it to dict try: new_args.append(json.loads(arg)) except: # regular string from a user new_args.append(arg) else: new_args.append(arg) if FileId.is_file_id(new_args[-1]): new_args[-1] = FileId(new_args[-1]) for key, value in kwargs.iteritems(): if isinstance(value, str): # when a json was supplied, we deserialize it to dict try: kwargs[key] = json.loads(value) except: pass if FileId.is_file_id(kwargs[key]): kwargs[key] = FileId(value) return func(*tuple(new_args), **kwargs)