changeset 4149:c36295487082

core: introduce Pydantic based models in `libervia.backend.models.core`
author Goffi <goffi@goffi.org>
date Wed, 22 Nov 2023 14:31:05 +0100
parents a8a0fa678ce2
children 26534d959d2d
files libervia/backend/models/core.py pyproject.toml
diffstat 2 files changed, 65 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libervia/backend/models/core.py	Wed Nov 22 14:31:05 2023 +0100
@@ -0,0 +1,64 @@
+#!/usr/bin/env python3
+
+# Libervia common models
+# Copyright (C) 2009-2023 Jérôme Poisson (goffi@goffi.org)
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+from typing import Annotated, Literal
+
+from pydantic import BaseModel, Field, validator
+
+
+class MessageData(dict):
+    pass
+
+
+class MessageUpdateData(BaseModel):
+    type: str
+
+    def __init__(self, **kwargs):
+        if "type" not in kwargs:
+            kwargs["type"] = "reactions"
+        super().__init__(**kwargs)
+
+
+class MessageEditData(MessageUpdateData):
+    message: dict[str, str] | None = Field(
+        None,
+        description=(
+            "Updated message content, can be in several languages (key is language code "
+            'or "" for default)'
+        ),
+    )
+    subject: dict[str, str] | None = Field(
+        None,
+        description=(
+            "Updated subject of the message, can be in several languages (key is "
+            'language code or "" for default)'
+        ),
+    )
+    mess_type: str | None = Field(
+        None,
+        description=(
+            "Updated type of the message (cf RFC 6121 §5.2.2) + C.MESS_TYPE_INFO (system "
+            "info)"
+        ),
+    )
+
+
+class MessageReactionData(MessageUpdateData):
+    reactions: dict[str, list[str]] = Field(
+        description="Reaction to reacting entities mapping"
+    )
--- a/pyproject.toml	Wed Nov 22 14:26:13 2023 +0100
+++ b/pyproject.toml	Wed Nov 22 14:31:05 2023 +0100
@@ -38,6 +38,7 @@
     "omemo >= 1.0.0, < 2",
     "pillow >= 6.0.0",
     "progressbar2 < 3.54",
+    "pydantic ~= 2.4",
     "pygments < 3",
     "pygobject < 3.40.1",
     "pyopenssl >= 23.2.0",