title: Add arguments to argparse depending on value of initial arguments
body: <p>I know similar questions have been asked before but I could not really find an exact one (also, I could not understand the 'nargs' or 'subparse' concept and how it would apply to my case)</p>
  
  <p>I want something like:</p>
  
  <pre><code>parser = argparse.ArgumentParser()
  parser.add_argument('-mode', choices=['download', 'upload'], required=True)
  parser.add_argument('-d', required=True)
  args = parser.parse_args()
  if args.mode == 'download':
      parser.add_argument('-f', required=True)
  
  args = parser.parse_args()
  </code></pre>
  
  <p>so the <code>-f</code> argument is required only when the <code>-mode</code> is <code>download</code> otherwise it should not be parsed </p>