add own includes and imports
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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)
|
|
||||||
Reference in New Issue
Block a user