<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def new(self, *args, **kwargs) -> str: """ Generate callback data :param args: :param kwargs: :return: """

        args = list(args)

        data = [self.prefix]

        for part in self._part_names:
            value = kwargs.pop(part, None)
            if value is None:
                if args:
                    value = args.pop(0)
                else:
                    raise ValueError(f"Value for '{part}' is not passed!")

            if value is not None and not isinstance(value, str):
                value = str(value)

            if not value:
                raise ValueError(f"Value for part {part} can't be empty!'")
            elif self.sep in value:
                raise ValueError(f"Symbol defined as separator can't be used in values of parts")

            data.append(value)

        if args or kwargs:
            raise TypeError('Too many arguments is passed!')

        callback_data = self.sep.join(data)
        if len(callback_data) > 64:
            raise ValueError('Resulted callback data is too long!')

        return callback_data