Skip to content
Prev Previous commit
Next Next commit
feat: newArgument
  • Loading branch information
HaeckelK committed Feb 14, 2022
commit ff8fece64a2f77eae30a1312842c532646bd0c55
55 changes: 42 additions & 13 deletions python-argparse-generator/src/__tests__/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
import { argparseCode } from '../index';
import { argparseCode, newArgument } from '../index';

test('Basic check of output', () => {
expect(
argparseCode(
[
{
name: 'folder',
type: 'str',
variableName: 'folder',
default: '/data',
required: true,
},
{ name: 'limit', type: 'int', variableName: 'limit', default: '10', required: true },
],
),
argparseCode([
{
name: 'folder',
type: 'str',
variableName: 'folder',
default: '/data',
required: true,
},
{ name: 'limit', type: 'int', variableName: 'limit', default: '10', required: true },
]),
).toBe(`import argparse
from typing import Dict, Any

Expand All @@ -40,3 +38,34 @@ if __name__ == '__main__':
limit=args["limit"])
`);
});

describe('New Argument Factory', () => {
test('Default Parameters', () => {
expect(newArgument('folder', 'str')).toStrictEqual({
name: 'folder',
type: 'str',
default: '',
variableName: 'folder',
required: false,
});
});
// TODO really I should have a variableNameCreate function
test('Variable Name Creation', () => {
expect(newArgument('time-delay', 'str')).toStrictEqual({
name: 'time-delay',
type: 'str',
default: '',
variableName: 'timedelay',
required: false,
});
});
test('All Params', () => {
expect(newArgument('folder', 'str', 'folder', '/data', true)).toStrictEqual({
name: 'folder',
type: 'str',
default: '/data',
variableName: 'folder',
required: true,
});
});
});
15 changes: 14 additions & 1 deletion python-argparse-generator/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,19 @@ export type Argument = {
required: boolean;
};

export const newArgument = (
name: string,
type: string,
variableName: string = '',
defaultValue: string = '',
required: boolean = false,
): Argument => {
if (variableName === '') {
variableName = name.replace(/-/g, '');
}
return { name, type, variableName, default: defaultValue, required };
};

function argumentToText(argument: Argument, parserName: string) {
switch (argument.type) {
case 'bool':
Expand All @@ -29,7 +42,7 @@ function argumentToText(argument: Argument, parserName: string) {

const argumentToMainParams = (argument: Argument) => `${argument.variableName}: ${argument.type}`;

export const argparseCode = (args: Argument[], parserName: string = "parser") => {
export const argparseCode = (args: Argument[], parserName: string = 'parser') => {
const mainParameters: string[] = args.map((arg) => argumentToMainParams(arg));
const argumentsText: string[] = args.map((arg) => argumentToText(arg, parserName));
const returnText: string[] = args.map((x) => {
Expand Down