diff --git a/src/generators/python/PythonPreset.ts b/src/generators/python/PythonPreset.ts index 9eaaaf4689..17aaec6ce7 100644 --- a/src/generators/python/PythonPreset.ts +++ b/src/generators/python/PythonPreset.ts @@ -10,6 +10,9 @@ import { PYTHON_DEFAULT_ENUM_PRESET } from './renderers/EnumRenderer'; +import { PYTHON_DATACLASS_PRESET } from './presets/PythonDataClassPreset'; +import { PYTHON_ATTRS_PRESET } from './presets/PythonAttrsPreset'; + export type ClassPresetType = ClassPreset; export type EnumPresetType = EnumPreset; @@ -22,3 +25,9 @@ export const PYTHON_DEFAULT_PRESET: PythonPreset = { class: PYTHON_DEFAULT_CLASS_PRESET, enum: PYTHON_DEFAULT_ENUM_PRESET }; + +export const PYTHON_PRESETS = { + default: PYTHON_DEFAULT_PRESET, + dataclass: PYTHON_DATACLASS_PRESET, + attrs: PYTHON_ATTRS_PRESET +}; \ No newline at end of file diff --git a/src/generators/python/presets/PythonAttrsPreset.ts b/src/generators/python/presets/PythonAttrsPreset.ts new file mode 100644 index 0000000000..3208d14f64 --- /dev/null +++ b/src/generators/python/presets/PythonAttrsPreset.ts @@ -0,0 +1,9 @@ +import { PythonPreset } from '../PythonPreset'; + +export const PYTHON_ATTRS_PRESET: PythonPreset = { + class: { + self({ renderer }) { + return `import attr\n\n@attr.s(auto_attribs=True)\n${renderer.defaultSelf()}`; + } + } +}; diff --git a/src/generators/python/presets/PythonDataClassPreset.ts b/src/generators/python/presets/PythonDataClassPreset.ts new file mode 100644 index 0000000000..51064715ff --- /dev/null +++ b/src/generators/python/presets/PythonDataClassPreset.ts @@ -0,0 +1,9 @@ +import { PythonPreset } from '../PythonPreset'; + +export const PYTHON_DATACLASS_PRESET: PythonPreset = { + class: { + self({ renderer }) { + return `from dataclasses import dataclass\n\n@dataclass\n${renderer.defaultSelf()}`; + } + } +}; diff --git a/src/generators/python/presets/index.ts b/src/generators/python/presets/index.ts index 659f3f1b28..f0b820d495 100644 --- a/src/generators/python/presets/index.ts +++ b/src/generators/python/presets/index.ts @@ -1,2 +1,4 @@ export { PYTHON_PYDANTIC_PRESET } from './Pydantic'; export { PYTHON_JSON_SERIALIZER_PRESET } from './JsonSerializer'; +export { PYTHON_DATACLASS_PRESET } from './PythonDataClassPreset'; +export { PYTHON_ATTRS_PRESET } from './PythonAttrsPreset'; \ No newline at end of file diff --git a/test/generators/python/presets/PythonDataclassPreset.test.ts b/test/generators/python/presets/PythonDataclassPreset.test.ts new file mode 100644 index 0000000000..8031450923 --- /dev/null +++ b/test/generators/python/presets/PythonDataclassPreset.test.ts @@ -0,0 +1,16 @@ +import { PythonGenerator } from '../../../../src/generators/python/PythonGenerator'; +import { PYTHON_DATACLASS_PRESET } from '../../../../src/generators/python/presets/PythonDataClassPreset'; + +describe('PythonDataclassPreset', () => { + test('should generate a class with @dataclass decorator', async () => { + const generator = new PythonGenerator({ presets: [PYTHON_DATACLASS_PRESET] }); + const inputModel = { + name: 'User', + properties: { name: { type: 'string' }, age: { type: 'integer' } } + }; + + const output = await generator.generate(inputModel); + expect(output).toContain('@dataclass'); + expect(output).toContain('class User'); + }); +});