Matching guests works nicely
This commit is contained in:
@@ -43,7 +43,7 @@ from .config_loader import load_config
|
||||
from .const import CONF_GOOGLE_ACCOUNT, CONF_HOTEL_ID, CONF_META_ACCOUNT, HttpStatusCode
|
||||
from .conversion_service import ConversionService
|
||||
from .customer_service import CustomerService
|
||||
from .db import Base, ResilientAsyncSession, create_database_engine
|
||||
from .db import Base, ResilientAsyncSession, SessionMaker, create_database_engine
|
||||
from .db import Customer as DBCustomer
|
||||
from .db import Reservation as DBReservation
|
||||
from .email_monitoring import ReservationStatsCollector
|
||||
@@ -295,9 +295,13 @@ async def lifespan(app: FastAPI):
|
||||
# Create resilient session wrapper for automatic connection recovery
|
||||
resilient_session = ResilientAsyncSession(AsyncSessionLocal, engine)
|
||||
|
||||
# Create SessionMaker for concurrent processing
|
||||
session_maker = SessionMaker(AsyncSessionLocal)
|
||||
|
||||
app.state.engine = engine
|
||||
app.state.async_sessionmaker = AsyncSessionLocal
|
||||
app.state.resilient_session = resilient_session
|
||||
app.state.session_maker = session_maker
|
||||
app.state.config = config
|
||||
app.state.alpine_bits_server = AlpineBitsServer(config)
|
||||
app.state.event_dispatcher = event_dispatcher
|
||||
@@ -409,6 +413,17 @@ async def get_async_session(request: Request):
|
||||
yield session
|
||||
|
||||
|
||||
def get_session_maker(request: Request) -> SessionMaker:
|
||||
"""Get the SessionMaker for creating independent database sessions.
|
||||
|
||||
This dependency provides a SessionMaker that can be used to create
|
||||
multiple independent sessions for concurrent processing tasks.
|
||||
Useful for processing large datasets concurrently where each task
|
||||
needs its own database transaction context.
|
||||
"""
|
||||
return request.app.state.session_maker
|
||||
|
||||
|
||||
def get_resilient_session(request: Request) -> ResilientAsyncSession:
|
||||
"""Get the resilient session manager from app state.
|
||||
|
||||
@@ -1256,6 +1271,7 @@ async def handle_xml_upload(
|
||||
filename: str,
|
||||
credentials_tupel: tuple = Depends(validate_basic_auth),
|
||||
db_session=Depends(get_async_session),
|
||||
session_maker: SessionMaker = Depends(get_session_maker),
|
||||
):
|
||||
"""Endpoint for receiving XML files for conversion processing via PUT.
|
||||
|
||||
@@ -1344,7 +1360,9 @@ async def handle_xml_upload(
|
||||
)
|
||||
|
||||
# Process the conversion XML and save to database
|
||||
conversion_service = ConversionService(db_session)
|
||||
# Use SessionMaker for concurrent processing of large XML files
|
||||
# This allows multiple reservations to be processed in parallel with independent sessions
|
||||
conversion_service = ConversionService(session_maker)
|
||||
processing_stats = await conversion_service.process_conversion_xml(xml_content)
|
||||
|
||||
_LOGGER.info(
|
||||
|
||||
Reference in New Issue
Block a user