diff --git a/README.md b/README.md
index 94c8bc7..334f11a 100644
--- a/README.md
+++ b/README.md
@@ -3,3 +3,6 @@ https://www.asyncapi.com/docs/tools/generator/generator-template#overview-of-ste
asyncapi generate fromTemplate openapi_templete/test/fixtures/asyncapi_test.yaml ./openapi_templete -o ./generated-code --force-write
asyncapi generate fromTemplate openapi_templete/test/fixtures/asyncapi_1.yaml ./openapi_templete -o ./generated-code --force-write
+
+
+https://github.com/asyncapi/modelina/blob/master/docs/languages/Python.md
diff --git a/generated-code/src/models/__init__.py b/generated-code/src/models/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/openapi_templete/package.json b/openapi_templete/package.json
index 45fca66..9a09c42 100644
--- a/openapi_templete/package.json
+++ b/openapi_templete/package.json
@@ -2,6 +2,12 @@
"name": "python-mqtt-client-template",
"version": "0.0.1",
"description": "A template that generates a Python MQTT client using MQTT.",
+ "scripts": {
+ "test:clean": "rimraf test/project/client.py",
+ "test:generate": "asyncapi generate fromTemplate ./test/fixtures/asyncapi_1.yaml ./ -o ./generated-code --force-write",
+ "test:start": "python test/project/test.py",
+ "test": "npm run test:clean && npm run test:generate && npm run test:start"
+ },
"generator": {
"apiVersion": "v3",
"generator": ">=2.0.0 <4.0.0",
diff --git a/openapi_templete/template/src/models/models.js b/openapi_templete/template/src/models/models.js
index 8bf5c43..88f5074 100644
--- a/openapi_templete/template/src/models/models.js
+++ b/openapi_templete/template/src/models/models.js
@@ -1,7 +1,7 @@
// 1
import { File } from '@asyncapi/generator-react-sdk';
// 2
-import { PythonGenerator, FormatHelpers } from '@asyncapi/modelina';
+import { PythonGenerator, PYTHON_PYDANTIC_PRESET } from '@asyncapi/modelina';
/**
* @typedef RenderArgument
@@ -9,25 +9,36 @@ import { PythonGenerator, FormatHelpers } from '@asyncapi/modelina';
* @property {AsyncAPIDocument} asyncapi document object received from the generator.
*/
+function generateModels(model) {
+ const properties = model.model?.properties ?? {};
+ const ownIncludes = Object.values(properties)
+ .filter(p => p.property.constructor.name === 'ConstrainedReferenceModel')
+ .map(p => `from ${p.property.ref.name} import ${p.property.ref.name}`).join('\n')
+ const imports = model.dependencies
+ .join('\n');
+
+ return (
+
+ {imports}
+ {'\n\n'}
+ {ownIncludes}
+ {'\n\n'}
+ {model.result}
+
+ );
+}
+
/**
* Render all schema models
- * @param {RenderArgument} param0
- * @returns
+ * @param {RenderArgument} param0
+ * @returns
*/
-// 3
+
export default async function schemaRender({ asyncapi }) {
- // 4
- const pythonGenerator = new PythonGenerator();
- // 5
+ const pythonGenerator = new PythonGenerator({
+ presets: [PYTHON_PYDANTIC_PRESET],
+ processorOptions: {}
+ });
const models = await pythonGenerator.generate(asyncapi);
- // 6
- const files = [];
- // 7
- for (const model of models) {
- // 8
- const modelFileName = `${FormatHelpers.toPascalCase(model.modelName)}.py`;
- // 9
- files.push({model.result});
- }
- return files;
+ return models.map(model => generateModels(model))
}
diff --git a/openapi_templete/test/fixtures/asyncapi_1.yaml b/openapi_templete/test/fixtures/asyncapi_1.yaml
index 02c67d3..06eeac0 100644
--- a/openapi_templete/test/fixtures/asyncapi_1.yaml
+++ b/openapi_templete/test/fixtures/asyncapi_1.yaml
@@ -55,6 +55,13 @@ components:
$ref: '#/components/schemas/OrderPlaced'
schemas:
+ Status:
+ type: string
+ enum:
+ - created
+ - pending
+ - confirmed
+
OrderCreated:
$id: OrderCreated
title: OrderCreated
@@ -76,13 +83,8 @@ components:
format: date-time
example: "2025-06-03T12:00:00Z"
status:
- type: string
- enum:
- - created
- - pending
- - confirmed
+ $ref: '#/components/schemas/Status'
default: created
-
OrderPlaced:
$id: OrderPlaced
title: OrderPlaced
diff --git a/openapi_templete/test/project/client.py b/openapi_templete/test/project/client.py
deleted file mode 100644
index b2aaa6c..0000000
--- a/openapi_templete/test/project/client.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# 1
-import paho.mqtt.client as mqtt
-# 2
-mqttBroker = "test.mosquitto.org"
-
-class TemperatureServiceClient:
- def __init__(self):
- # 3
- self.client = mqtt.Client()
- # 4
- self.client.connect(mqttBroker)
-
-
- def sendTemperatureChange(self, id):
- # 5
- topic = "temperature/changed"
- # 6
- self.client.publish(topic, id)