From d49266ce6c9ad58ae02972d445c93ab7170f87b4 Mon Sep 17 00:00:00 2001 From: Daniel McKnight Date: Tue, 10 Dec 2024 13:35:51 -0800 Subject: [PATCH] Add MQResponse model to define parameters used in https://github.com/NeonGeckoCom/neon_mq_connector/pull/101 --- neon_data_models/models/base/contexts.py | 4 +++ neon_data_models/models/base/mq.py | 38 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 neon_data_models/models/base/mq.py diff --git a/neon_data_models/models/base/contexts.py b/neon_data_models/models/base/contexts.py index f715169..a7e55ce 100644 --- a/neon_data_models/models/base/contexts.py +++ b/neon_data_models/models/base/contexts.py @@ -93,5 +93,9 @@ class KlatContext(BaseModel): class MQContext(BaseModel): + """ + MQ context information that is included in all MQ message bodies and in + `Message.context['MQ']` for Message objects originating at MQ handlers. + """ routing_key: Optional[str] = None message_id: str diff --git a/neon_data_models/models/base/mq.py b/neon_data_models/models/base/mq.py new file mode 100644 index 0000000..4467508 --- /dev/null +++ b/neon_data_models/models/base/mq.py @@ -0,0 +1,38 @@ +# NEON AI (TM) SOFTWARE, Software Development Kit & Application Development System +# All trademark and other rights reserved by their respective owners +# Copyright 2008-2024 Neongecko.com Inc. +# BSD-3 +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from this +# software without specific prior written permission. +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +from typing import Optional +from pydantic import Field +from neon_data_models.models.base.contexts import MQContext + + +class MQResponse(MQContext): + is_final: bool = Field(default=True, alias="_is_final", + description='If False, another response message is ' + 'expected.') + part: Optional[int] = Field(default=None, alias="_part", + description='Index of this response message in ' + 'a series. (zero-indexed)')