code: def schedule(func, *args, **kwargs):
      
      name = kwargs.pop('name', None)
      hook = kwargs.pop('hook', None)
      schedule_type = kwargs.pop('schedule_type', Schedule.ONCE)
      minutes = kwargs.pop('minutes', None)
      repeats = kwargs.pop('repeats', -1)
      next_run = kwargs.pop('next_run', timezone.now())
  
      # check for name duplicates instead of am unique constraint
      if name and Schedule.objects.filter(name=name).exists():
          raise IntegrityError("A schedule with the same name already exists.")
  
      # create and return the schedule
      return Schedule.objects.create(name=name,
                                     func=func,
                                     hook=hook,
                                     args=args,
                                     kwargs=kwargs,
                                     schedule_type=schedule_type,
                                     minutes=minutes,
                                     repeats=repeats,
                                     next_run=next_run
                                     )
docs: Create a schedule.
  
      :param func: function to schedule.
      :param args: function arguments.
      :param name: optional name for the schedule.
      :param hook: optional result hook function.
      :type schedule_type: Schedule.TYPE
      :param repeats: how many times to repeat. 0=never, -1=always.
      :param next_run: Next scheduled run.
      :type next_run: datetime.datetime
      :param kwargs: function keyword arguments.
      :return: the schedule object.
      :rtype: Schedule