code: def depends(func):
      
      from jcvi.apps.base import need_update, listify
  
      infile = "infile"
      outfile = "outfile"
  
      def wrapper(*args, **kwargs):
          assert outfile in kwargs, \
              "You need to specify `outfile=` on function call"
          if infile in kwargs:
              infilename = listify(kwargs[infile])
              for x in infilename:
                  assert op.exists(x), \
                      "The specified infile `{0}` does not exist".format(x)
  
          outfilename = kwargs[outfile]
          if need_update(infilename, outfilename):
              return func(*args, **kwargs)
          else:
              msg = "File `{0}` exists. Computation skipped." \
                  .format(outfilename)
              logging.debug(msg)
  
          outfilename = listify(outfilename)
  
          for x in outfilename:
              assert op.exists(x), \
                  "Something went wrong, `{0}` not found".format(x)
  
          return outfilename
  
      return wrapper
docs: Decorator to perform check on infile and outfile. When infile is not present, issue
      warning, and when outfile is present, skip function calls.