SIENTIAPDE-1107

feat: implement MongoDB integration with clear_mongo_id function and related tests
This commit is contained in:
vitor-aignosi
2025-06-16 16:01:20 -03:00
parent 7984cb29f4
commit f7b73618d8
6 changed files with 332 additions and 32 deletions

View File

@@ -1,10 +1,10 @@
import pymongo
from temporalio import workflow, activity
with workflow.unsafe.imports_passed_through():
from typing import Any
import traceback
from logging import Logger
from pymongo import MongoClient
from sientia_do.notifications.handlers import NotificationHandler
from sientia_do.notifications.models import NotificationLevel
from sientia_do.temporal.activities.base import BaseActivity
@@ -21,25 +21,18 @@ def clear_mongo_id(docs: list) -> list:
list: The documents without the `_id` field.
"""
for doc in docs:
if not isinstance(doc, dict) and not isinstance(doc, list):
continue
if "_id" in doc:
del doc["_id"]
if isinstance(doc, dict):
for _key, value in doc.items():
if isinstance(value, dict):
clear_mongo_id([value])
elif isinstance(value, list):
clear_mongo_id(value)
if isinstance(doc, list):
for item in doc:
if isinstance(item, dict):
clear_mongo_id([item])
elif isinstance(item, list):
clear_mongo_id(item)
clear_mongo_id(doc)
elif isinstance(doc, dict):
if "_id" in doc:
del doc["_id"]
for key, value in doc.items():
if isinstance(value, list):
clear_mongo_id(value)
elif isinstance(value, dict):
clear_mongo_id([value])
return docs
@@ -51,14 +44,14 @@ class MongoDB(BaseActivity):
self.connection_string = connection_string
self.database_name = database_name
self.client = pymongo.MongoClient(
self.client = MongoClient(
self.connection_string, serverSelectionTimeoutMS=5000)
self.client.server_info() # Trigger an exception if connection fails
self.database = self.client[self.database_name]
# Initialize MongoDB client here (omitted for brevity)
self.logger.info("MongoDB connection initialized")
logger.info("MongoDB connection initialized")
BaseActivity.__init__(self,
logger=logger,