47 lines
2.2 KiB
Python
47 lines
2.2 KiB
Python
import asyncio
|
|
from typing import List, Optional
|
|
from datetime import datetime, timedelta, timezone
|
|
from .models import ContentDirectory, ContentFolderDoc
|
|
from common.constants.region import UserRegion
|
|
from backend.document.document_manager import DocumentManager
|
|
from .content_sharepoint_manager import ContentSharePointManager
|
|
from backend.content.constants import ContentSource
|
|
from common.log.module_logger import ModuleLogger
|
|
|
|
|
|
class ContentService:
|
|
def __init__(self) -> None:
|
|
self.module_logger = ModuleLogger(sender_id="ContentService")
|
|
|
|
async def retrieve_content_directories_for_folder(
|
|
self, folder_name: str, region: UserRegion
|
|
) -> List[ContentDirectory]:
|
|
await self.module_logger.log_info(f"Retrieving content directories for folder: {folder_name}, region: {region.name}")
|
|
|
|
folder = (
|
|
await ContentFolderDoc.find(
|
|
ContentFolderDoc.folder_name == folder_name,
|
|
ContentFolderDoc.region == region,
|
|
)
|
|
.sort(-ContentFolderDoc.udpate_time)
|
|
.first_or_none()
|
|
)
|
|
if folder is None or folder.valid_thru.replace(
|
|
tzinfo=timezone.utc
|
|
) < datetime.now(timezone.utc):
|
|
await self.module_logger.log_info(f"Folder cache expired or not found, fetching from SharePoint: {folder_name}")
|
|
folder = await ContentSharePointManager().retrieve_directories_for_folder(
|
|
folder_name=folder_name, region=region
|
|
)
|
|
|
|
result = folder.content_directories if folder else None
|
|
await self.module_logger.log_info(f"Successfully retrieved {len(result) if result else 0} content directories for folder: {folder_name}")
|
|
return result
|
|
|
|
async def retrieve_content_as_media_data(self, document_id: str) -> Optional[str]:
|
|
await self.module_logger.log_info(f"Retrieving content as media data for document ID: {document_id}")
|
|
document_manager = DocumentManager()
|
|
result = await document_manager.retrieve_document_as_http_media(document_id)
|
|
await self.module_logger.log_info(f"Successfully retrieved media data for document ID: {document_id}")
|
|
return result
|