add own includes and imports

This commit is contained in:
marys
2026-06-08 14:27:51 +02:00
parent dd31750e1a
commit 0b0af515be
6 changed files with 45 additions and 41 deletions
+3
View File
@@ -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_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 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
+6
View File
@@ -2,6 +2,12 @@
"name": "python-mqtt-client-template", "name": "python-mqtt-client-template",
"version": "0.0.1", "version": "0.0.1",
"description": "A template that generates a Python MQTT client using MQTT.", "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": { "generator": {
"apiVersion": "v3", "apiVersion": "v3",
"generator": ">=2.0.0 <4.0.0", "generator": ">=2.0.0 <4.0.0",
+26 -15
View File
@@ -1,7 +1,7 @@
// 1 // 1
import { File } from '@asyncapi/generator-react-sdk'; import { File } from '@asyncapi/generator-react-sdk';
// 2 // 2
import { PythonGenerator, FormatHelpers } from '@asyncapi/modelina'; import { PythonGenerator, PYTHON_PYDANTIC_PRESET } from '@asyncapi/modelina';
/** /**
* @typedef RenderArgument * @typedef RenderArgument
@@ -9,25 +9,36 @@ import { PythonGenerator, FormatHelpers } from '@asyncapi/modelina';
* @property {AsyncAPIDocument} asyncapi document object received from the generator. * @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 (
<File name={`${model.modelName}.py`}>
{imports}
{'\n\n'}
{ownIncludes}
{'\n\n'}
{model.result}
</File>
);
}
/** /**
* Render all schema models * Render all schema models
* @param {RenderArgument} param0 * @param {RenderArgument} param0
* @returns * @returns
*/ */
// 3
export default async function schemaRender({ asyncapi }) { export default async function schemaRender({ asyncapi }) {
// 4 const pythonGenerator = new PythonGenerator({
const pythonGenerator = new PythonGenerator(); presets: [PYTHON_PYDANTIC_PRESET],
// 5 processorOptions: {}
});
const models = await pythonGenerator.generate(asyncapi); const models = await pythonGenerator.generate(asyncapi);
// 6 return models.map(model => generateModels(model))
const files = [];
// 7
for (const model of models) {
// 8
const modelFileName = `${FormatHelpers.toPascalCase(model.modelName)}.py`;
// 9
files.push(<File name={modelFileName}>{model.result}</File>);
}
return files;
} }
+8 -6
View File
@@ -55,6 +55,13 @@ components:
$ref: '#/components/schemas/OrderPlaced' $ref: '#/components/schemas/OrderPlaced'
schemas: schemas:
Status:
type: string
enum:
- created
- pending
- confirmed
OrderCreated: OrderCreated:
$id: OrderCreated $id: OrderCreated
title: OrderCreated title: OrderCreated
@@ -76,13 +83,8 @@ components:
format: date-time format: date-time
example: "2025-06-03T12:00:00Z" example: "2025-06-03T12:00:00Z"
status: status:
type: string $ref: '#/components/schemas/Status'
enum:
- created
- pending
- confirmed
default: created default: created
OrderPlaced: OrderPlaced:
$id: OrderPlaced $id: OrderPlaced
title: OrderPlaced title: OrderPlaced
-18
View File
@@ -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)