5bbd1d38c9271ba6319a46f0827ff90ec8c25efd
ceisenhart
  Thu Oct 22 19:25:39 2015 -0700
Adding a check to the argparse module that causes the program to spit help with no arguments. This replicates the C code style.  Refs #16156

diff --git src/utils/newPythonProg/newPythonProg.c src/utils/newPythonProg/newPythonProg.c
index cde87f0..319c951 100644
--- src/utils/newPythonProg/newPythonProg.c
+++ src/utils/newPythonProg/newPythonProg.c
@@ -1,107 +1,108 @@
 /* newPythonProg - Make a skeleton for a new python program. */
 #include "common.h"
 #include "portable.h"
 #include "dystring.h"
 #include "options.h"
 
 void usage()
 /* Explain usage and exit. */
 {
 errAbort(
   "newPythonProg - Make a skeleton for a new python program\n"
   "usage:\n"
   "   newPythonProg programName \"The usage statement\"\n"
   "options:\n"
   "   -xxx=XXX\n"
   );
 }
 
 
 /* Command line validation table. */
 static struct optionSpec options[] = {
    {NULL, 0},
 };
 
 void makeMakefile(char *progName, char *makeName)
 /* Make makefile. */
 {
 char *upLevel;
 //char *L;
 //char *myLibs;
 FILE *f = mustOpen(makeName, "w");
 
 if (fileExists("../inc/common.mk"))
 	upLevel = cloneString("..");
 else if (fileExists("../../inc/common.mk"))
 	upLevel = cloneString("../..");
 else if (fileExists("../../../inc/common.mk"))
 	upLevel = cloneString("../../..");
 else if (fileExists("../../../../inc/common.mk"))
 	upLevel = cloneString("../../../..");
 else if (fileExists("../../../../../inc/common.mk"))
 	upLevel = cloneString("../../../../..");
 else
     {
     warn("WARNING: can not find inc/common.mk 1 to 4 directories up, fix the makefile");
     upLevel = cloneString("../../../../..");
     }
 fprintf(f, 
 "normal::\n\t cp -p %s ${HOME}/bin\n\t cp -p %s ${HOME}/kent/src/pyLib/scripts\n"
 "test::\n\t@if test -d tests -a -s tests/makefile; then (cd tests && ${MAKE} test); \\ " 
 "\n\telse echo \"# no tests directory (or perhaps no tests/makefile) in $(CURDIR)\"; fi"
 , progName, progName);
 
 fclose(f);
 }
 
 void writeProgram(char *fileName, char *programName, char *usage)
 {
 FILE *programFile = mustOpen(fileName, "w"); 
 // Write the python skeleton
 fprintf(programFile, "#!/usr/bin/env python2.7\n# %s\n\"\"\"%s\"\"\"\n", programName,  usage);
 fprintf(programFile, 
     "import os\nimport sys\nimport collections\nimport argparse\n"
     "\n"
     "# import the UCSC kent python library\n"
     "sys.path.append(os.path.join(os.path.dirname(__file__), 'pyLib'))\n"
     "import common\n\n");
 fprintf(programFile, "def parseArgs(args):\n    \"\"\"\n    Parse the command line arguments.\n    \"\"\"\n    parser" 
 		    "= argparse.ArgumentParser(description = __doc__)\n    parser.add_argument (\"inpu"
 		    "tFile\",\n    help = \" The input file. \",\n    type = argparse.FileType(\"r\"))\n    ");
 fprintf(programFile, "parser.add_argument (\"outputFile\",\n    help = \" The output file. \",\n    type =" 
-		    "argparse.FileType(\"w\"))\n    options = parser.parse_args()\n    return options\n\n"); 
+		    "argparse.FileType(\"w\"))\n    if (len(sys.argv) == 1):\n        parser.print_help()\n"
+		    "        exit(1)\n    options = parser.parse_args()\n    return options\n\n"); 
 fprintf(programFile, "def main(args):\n    \"\"\"\n    Initialized options and calls other functions.\n    \"\"\"\n    "
 		    "options = parseArgs(args)\n\nif __name__ == \""
 		    "__main__\" : \n    sys.exit(main(sys.argv))"); 
 }
 
 
 
 void newPythonProg(char *programName, char *usage)
 /* newPythonProg - Make a skeleton for a new python program. */
 {
 char fileName[512];
 char dirName[512];
 //char fileOnly[128];
 safef(dirName, sizeof(dirName), "%s", programName);
 makeDir(dirName);
 // Stolen code from newProg
 safef(fileName, sizeof(fileName), "%s/%s", programName, programName);
 writeProgram(fileName, programName, usage);
 setCurrentDir(dirName);
 makeMakefile(programName, "makefile");
 // Change file permissions    
 char cmd[1024]; 
 safef(cmd, 1024, "chmod 755 %s",programName);  
 mustSystem(cmd); 
 }
 
 int main(int argc, char *argv[])
 /* Process command line. */
 {
 optionInit(&argc, argv, options);
 if (argc != 3)
     usage();
 newPythonProg(argv[1], argv[2]);
 return 0;
 }