Skip to content
Prev Previous commit
Next Next commit
feat: argsName to settings
  • Loading branch information
HaeckelK committed Feb 15, 2022
commit 8e4ea1c79b7073e0518af24a2a9b043275163bb7
15 changes: 9 additions & 6 deletions python-argparse-generator/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@ export type Settings = {
mainContents: string;
mainName: string;
cliName: string;
argsName: string;
}

export const defaultSettings = (): Settings => {
return {parserName: "parser",
typeHints: true,
mainContents: "# Contents of main",
mainName: "main",
cliName: "cli"};
cliName: "cli",
argsName: "args"};
};

export type Argument = {
Expand Down Expand Up @@ -60,13 +62,14 @@ const argumentToMainParams = (argument: Argument) => `${argument.variableName}:

export const argparseCode = (args: Argument[], settings: Settings = defaultSettings()) => {
const parserName: string = settings.parserName;
const argsName: string = settings.argsName;
const mainParameters: string[] = args.map((arg) => argumentToMainParams(arg));
const argumentsText: string[] = args.map((arg) => argumentToText(arg, parserName));
const returnText: string[] = args.map((x) => {
if (x.type === 'str') {
return `"${x.variableName}": args.${x.variableName},`;
return `"${x.variableName}": ${argsName}.${x.variableName},`;
} else {
return `"${x.variableName}": ${x.type}(args.${x.variableName}),`;
return `"${x.variableName}": ${x.type}(${argsName}.${x.variableName}),`;
}
});

Expand All @@ -84,13 +87,13 @@ def ${settings.cliName}() -> Dict[str, Any]:

${argumentsText.join('\n ')}

args = ${parserName}.parse_args()
${argsName} = ${parserName}.parse_args()

return {${returnText.join('\n ').slice(0, -1)}}

if __name__ == '__main__':
args = ${settings.cliName}()
${settings.mainName}(${args.map((x) => `${x.variableName}=args["${x.variableName}"]`).join(',\n ')})
${argsName} = ${settings.cliName}()
${settings.mainName}(${args.map((x) => `${x.variableName}=${argsName}["${x.variableName}"]`).join(',\n ')})
`;
return output;
};