Source code for oshconnect.events.core
# =============================================================================
# Copyright (c) 2025 Botts Innovative Research Inc.
# Date: 2025/10/6
# Author: Ian Patterson
# Contact Email: ian@botts-inc.com
# =============================================================================
from __future__ import annotations
import datetime
from enum import Enum
from typing import Any
from pydantic import BaseModel, ConfigDict
[docs]
class DefaultEventTypes(Enum):
ADD_NODE: str = "add_node"
REMOVE_NODE: str = "remove_node"
ADD_SYSTEM: str = "add_system"
REMOVE_SYSTEM: str = "remove_system"
ADD_DATASTREAM: str = "add_datastream"
REMOVE_DATASTREAM: str = "remove_datastream"
ADD_CONTROLSTREAM: str = "add_controlstream"
REMOVE_CONTROLSTREAM: str = "remove_controlstream"
NEW_OBSERVATION: str = "new_observation"
NEW_COMMAND: str = "new_command"
NEW_COMMAND_STATUS: str = "new_command_status"
[docs]
class AtomicEventTypes(Enum):
"""
Defines atomic event types for local resource operations.
Attributes:
CREATE (str): Creating a resource within OSHConnect (local, in-app).
POST (str): Posting a resource to an external server.
GET (str): Retrieving a resource from an external server.
MODIFY (str): Modifying a resource within OSHConnect (local, in-app).
UPDATE (str): Updating a resource on an external server.
REMOVE (str): Removing a resource within OSHConnect (local, in-app).
DELETE (str): Deleting a resource from an external server.
"""
CREATE: str = "create"
POST: str = "post"
GET: str = "get"
MODIFY: str = "modify"
UPDATE: str = "update"
REMOVE: str = "remove"
DELETE: str = "delete"
[docs]
class Event(BaseModel):
model_config = ConfigDict(arbitrary_types_allowed=True)
timestamp: datetime.datetime
type: DefaultEventTypes
topic: str
data: Any
producer: Any
[docs]
@classmethod
def blank_event(cls) -> Event:
return cls(
timestamp=datetime.datetime.now(),
type=DefaultEventTypes.NEW_OBSERVATION,
topic="",
data=None,
producer=None
)