kind of a mess lol but file caching and front end
This commit is contained in:
@ -2,6 +2,11 @@ from typing import Any, Dict, Optional, Union
|
||||
import aiohttp
|
||||
import logging
|
||||
import json
|
||||
import csv
|
||||
import io
|
||||
from app.services.service_manager import ServiceManager
|
||||
from app.schemas.file import FileInDB
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -10,6 +15,8 @@ class BaseExternalService:
|
||||
self.base_url = base_url
|
||||
self.api_key = api_key
|
||||
self.session = None
|
||||
self.service_manager = ServiceManager()
|
||||
self._services = {}
|
||||
|
||||
async def _get_session(self) -> aiohttp.ClientSession:
|
||||
if self.session is None or self.session.closed:
|
||||
@ -73,4 +80,36 @@ class BaseExternalService:
|
||||
if self.session and not self.session.closed:
|
||||
await self.session.close()
|
||||
self.session = None
|
||||
logger.info(f"Closed session for {self.__class__.__name__}")
|
||||
logger.info(f"Closed session for {self.__class__.__name__}")
|
||||
|
||||
def get_service(self, name: str) -> Any:
|
||||
"""Get a service by name with lazy loading"""
|
||||
if name not in self._services:
|
||||
self._services[name] = self.service_manager.get_service(name)
|
||||
return self._services[name]
|
||||
|
||||
@property
|
||||
def file_service(self):
|
||||
"""Convenience property for file service"""
|
||||
return self.get_service('file')
|
||||
|
||||
async def save_file(self, db: Session, file_data: Union[bytes, list[dict]], file_name: str, subdir: str, file_type: Optional[str] = None) -> FileInDB:
|
||||
"""Save a file using the FileService"""
|
||||
if isinstance(file_data, list):
|
||||
# Convert list of dictionaries to CSV bytes
|
||||
output = io.StringIO()
|
||||
writer = csv.DictWriter(output, fieldnames=file_data[0].keys())
|
||||
writer.writeheader()
|
||||
writer.writerows(file_data)
|
||||
file_data = output.getvalue().encode('utf-8')
|
||||
file_type = file_type or 'text/csv'
|
||||
|
||||
# Use FileService to save the file
|
||||
file_service = self.get_service('file')
|
||||
return await file_service.save_file(
|
||||
db=db,
|
||||
file_data=file_data,
|
||||
filename=file_name,
|
||||
subdir=subdir,
|
||||
file_type=file_type
|
||||
)
|
Reference in New Issue
Block a user