code: def get_next(cls, task, releasetype, typ, descriptor=None):
          
          qs = dj.taskfiles.filter(task=task, releasetype=releasetype, descriptor=descriptor, typ=typ)
          if qs.exists():
              ver = qs.aggregate(Max('version'))['version__max']+1
          else:
              ver = 1
          return TaskFileInfo(task=task, version=ver, releasetype=releasetype, typ=typ, descriptor=descriptor)
docs: Returns a TaskFileInfo that with the next available version and the provided info
  
          :param task: the task of the taskfile
          :type task: :class:`jukeboxcore.djadapter.models.Task`
          :param releasetype: the releasetype
          :type releasetype: str - :data:`jukeboxcore.djadapter.RELEASETYPES`
          :param typ: the file type, see :data:`TaskFileInfo.TYPES`
          :type typ: str
          :param descriptor: the descriptor, if the taskfile has one.
          :type descriptor: str|None
          :returns: taskfileinfoobject with next available version and the provided info
          :rtype: :class:`TaskFileInfo`
          :raises: None