async def generate_entities(self) -> AsyncGenerator[ChunkEntity, None]:
        """Generate all Outlook Calendar entities: Calendars, Events and Attachments."""
        logger.info("===== STARTING OUTLOOK CALENDAR ENTITY GENERATION =====")
        entity_count = 0

        try:
            async with httpx.AsyncClient() as client:
                logger.info("HTTP client created, starting entity generation")

                # Generate calendar entities and their events
                async for calendar_entity in self._generate_calendar_entities(client):
                    entity_count += 1
                    logger.info(
                        f"Yielding entity #{entity_count}: Calendar - {calendar_entity.name}"
                    )
                    yield calendar_entity

                    # Generate events for this calendar
                    async for event_entity in self._generate_event_entities(
                        client, calendar_entity
                    ):
                        entity_count += 1
                        entity_type = type(event_entity).__name__
                        entity_id = event_entity.entity_id
                        logger.info(
                            f"Yielding entity #{entity_count}: {entity_type} with ID {entity_id}"
                        )
                        yield event_entity

        except Exception as e:
            logger.error(f"Error in entity generation: {str(e)}", exc_info=True)
            raise
        finally:
            logger.info(
                f"===== OUTLOOK CALENDAR ENTITY GENERATION COMPLETE: {entity_count} entities ====="
            )
Generate all Outlook Calendar entities: Calendars, Events and Attachments.
backend/airweave/platform/sources/outlook_calendar.py