# Aniworld Web Application Development Instructions This document provides detailed tasks for AI agents to implement a modern web application for the Aniworld anime download manager. All tasks should follow the coding guidelines specified in the project's copilot instructions. ## Project Overview The goal is to create a FastAPI-based web application that provides a modern interface for the existing Aniworld anime download functionality. The core anime logic should remain in `SeriesApp.py` while the web layer provides REST API endpoints and a responsive UI. ## Architecture Principles - **Single Responsibility**: Each file/class has one clear purpose - **Dependency Injection**: Use FastAPI's dependency system - **Clean Separation**: Web layer calls core logic, never the reverse - **File Size Limit**: Maximum 500 lines per file - **Type Hints**: Use comprehensive type annotations - **Error Handling**: Proper exception handling and logging ## Additional Implementation Guidelines ### Code Style and Standards - **Type Hints**: Use comprehensive type annotations throughout all modules - **Docstrings**: Follow PEP 257 for function and class documentation - **Error Handling**: Implement custom exception classes with meaningful messages - **Logging**: Use structured logging with appropriate log levels - **Security**: Validate all inputs and sanitize outputs - **Performance**: Use async/await patterns for I/O operations ## ๐Ÿ“ž Escalation If you encounter: - Architecture issues requiring design decisions - Tests that conflict with documented requirements - Breaking changes needed - Unclear requirements or expectations **Document the issue and escalate rather than guessing.** --- ## ๏ฟฝ Credentials **Admin Login:** - Username: `admin` - Password: `Hallo123!` --- ## ๏ฟฝ๐Ÿ“š Helpful Commands ```bash # Run all tests conda run -n AniWorld python -m pytest tests/ -v --tb=short # Run specific test file conda run -n AniWorld python -m pytest tests/unit/test_websocket_service.py -v # Run specific test class conda run -n AniWorld python -m pytest tests/unit/test_websocket_service.py::TestWebSocketService -v # Run specific test conda run -n AniWorld python -m pytest tests/unit/test_websocket_service.py::TestWebSocketService::test_broadcast_download_progress -v # Run with extra verbosity conda run -n AniWorld python -m pytest tests/ -vv # Run with full traceback conda run -n AniWorld python -m pytest tests/ -v --tb=long # Run and stop at first failure conda run -n AniWorld python -m pytest tests/ -v -x # Run tests matching pattern conda run -n AniWorld python -m pytest tests/ -v -k "auth" # Show all print statements conda run -n AniWorld python -m pytest tests/ -v -s #Run app conda run -n AniWorld python -m uvicorn src.server.fastapi_app:app --host 127.0.0.1 --port 8000 --reload ``` --- ## Implementation Notes 1. **Incremental Development**: Implement features incrementally, testing each component thoroughly before moving to the next 2. **Code Review**: Review all generated code for adherence to project standards 3. **Documentation**: Document all public APIs and complex logic 4. **Testing**: Maintain test coverage above 80% for all new code 5. **Performance**: Profile and optimize critical paths, especially download and streaming operations 6. **Security**: Regular security audits and dependency updates 7. **Monitoring**: Implement comprehensive monitoring and alerting 8. **Maintenance**: Plan for regular maintenance and updates --- ## Task Completion Checklist For each task completed: - [ ] Implementation follows coding standards - [ ] Unit tests written and passing - [ ] Integration tests passing - [ ] Documentation updated - [ ] Error handling implemented - [ ] Logging added - [ ] Security considerations addressed - [ ] Performance validated - [ ] Code reviewed - [ ] Task marked as complete in instructions.md - [ ] Infrastructure.md updated and other docs - [ ] Changes committed to git; keep your messages in git short and clear - [ ] Take the next task --- ## TODO List: 1. fix issue: 2026-01-23 18:28:39 [info ] DownloadService initialized max*retries=3 INFO: QueueRepository initialized ERROR: Failed to get all items: greenlet_spawn has not been called; can't call await_only() here. Was IO attempted in an unexpected place? (Background on this error at: https://sqlalche.me/e/20/xd2s) 2026-01-23 18:28:39 [error ] Failed to load queue from database: Failed to get all items: greenlet_spawn has not been called; can't call await_only() here. Was IO attempted in an unexpected place? (Background on this error at: https://sqlalche.me/e/20/xd2s) โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ /home/lukas/Volume/repo/Aniworld/src/server/services/queue_repository.py:292 in get_all_items โ”‚ โ”‚ โ”‚ โ”‚ 289 โ”‚ โ”‚ โ”‚ db_items = await DownloadQueueService.get_all( โ”‚ โ”‚ 290 โ”‚ โ”‚ โ”‚ โ”‚ session, with_series=True โ”‚ โ”‚ 291 โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ โฑ 292 โ”‚ โ”‚ โ”‚ return [self._from_db_model(item) for item in db_items] โ”‚ โ”‚ 293 โ”‚ โ”‚ โ”‚ โ”‚ 294 โ”‚ โ”‚ except Exception as e: โ”‚ โ”‚ 295 โ”‚ โ”‚ โ”‚ logger.error("Failed to get all items: %s", e) โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ db = None โ”‚ โ”‚ โ”‚ โ”‚ db_items = [ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ... +21 โ”‚ โ”‚ โ”‚ โ”‚ ] โ”‚ โ”‚ โ”‚ โ”‚ manage_session = True โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ session = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/Volume/repo/Aniworld/src/server/services/queue_repository.py:97 in \_from_db_model โ”‚ โ”‚ โ”‚ โ”‚ 94 โ”‚ โ”‚ โ”‚ Pydantic download item with default status/priority โ”‚ โ”‚ 95 โ”‚ โ”‚ """ โ”‚ โ”‚ 96 โ”‚ โ”‚ # Get episode info from the related Episode object โ”‚ โ”‚ โฑ 97 โ”‚ โ”‚ episode = db_item.episode โ”‚ โ”‚ 98 โ”‚ โ”‚ series = db_item.series โ”‚ โ”‚ 99 โ”‚ โ”‚ โ”‚ โ”‚ 100 โ”‚ โ”‚ episode_identifier = EpisodeIdentifier( โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ db_item = โ”‚ โ”‚ โ”‚ โ”‚ item_id = None โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/orm/attributes.py:5 โ”‚ โ”‚ 69 in **get** โ”‚ โ”‚ โ”‚ โ”‚ 566 โ”‚ โ”‚ โ”‚ โ”‚ state = instance_state(instance) โ”‚ โ”‚ 567 โ”‚ โ”‚ โ”‚ except AttributeError as err: โ”‚ โ”‚ 568 โ”‚ โ”‚ โ”‚ โ”‚ raise orm_exc.UnmappedInstanceError(instance) from err โ”‚ โ”‚ โฑ 569 โ”‚ โ”‚ โ”‚ return self.impl.get(state, dict*) # type: ignore[no-any-return] โ”‚ โ”‚ 570 โ”‚ โ”‚ 571 โ”‚ โ”‚ 572 @dataclasses.dataclass(frozen=True) โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ dict* = { โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '\_sa_instance_state': , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'id': 8, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'error_message': None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'file_destination': None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'completed_at': None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'updated_at': datetime.datetime(2026, 1, 23, 17, 10, 47), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'series_id': 146, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'episode_id': 26, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'download_url': None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'started_at': None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ... +2 โ”‚ โ”‚ โ”‚ โ”‚ } โ”‚ โ”‚ โ”‚ โ”‚ instance = โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ state = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/orm/attributes.py:1 โ”‚ โ”‚ 096 in get โ”‚ โ”‚ โ”‚ โ”‚ 1093 โ”‚ โ”‚ โ”‚ โ”‚ if not passive & CALLABLES_OK: โ”‚ โ”‚ 1094 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ return PASSIVE_NO_RESULT โ”‚ โ”‚ 1095 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โฑ 1096 โ”‚ โ”‚ โ”‚ โ”‚ value = self.\_fire_loader_callables(state, key, passive) โ”‚ โ”‚ 1097 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 1098 โ”‚ โ”‚ โ”‚ โ”‚ if value is PASSIVE_NO_RESULT or value is NO_VALUE: โ”‚ โ”‚ 1099 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ return value โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ dict* = { โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ '_sa_instance_state': , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'id': 8, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'error_message': None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'file_destination': None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'completed_at': None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'updated_at': datetime.datetime(2026, 1, 23, 17, 10, 47), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'series_id': 146, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'episode_id': 26, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'download_url': None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'started_at': None, โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ... +2 โ”‚ โ”‚ โ”‚ โ”‚ } โ”‚ โ”‚ โ”‚ โ”‚ key = 'episode' โ”‚ โ”‚ โ”‚ โ”‚ passive = symbol('PASSIVE_OFF') โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ state = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/orm/attributes.py:1 โ”‚ โ”‚ 131 in \_fire_loader_callables โ”‚ โ”‚ โ”‚ โ”‚ 1128 โ”‚ โ”‚ โ”‚ callable_ = state.callables[key] โ”‚ โ”‚ 1129 โ”‚ โ”‚ โ”‚ return callable*(state, passive) โ”‚ โ”‚ 1130 โ”‚ โ”‚ elif self.callable*: โ”‚ โ”‚ โฑ 1131 โ”‚ โ”‚ โ”‚ return self.callable*(state, passive) โ”‚ โ”‚ 1132 โ”‚ โ”‚ else: โ”‚ โ”‚ 1133 โ”‚ โ”‚ โ”‚ return ATTR_EMPTY โ”‚ โ”‚ 1134 โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ key = 'episode' โ”‚ โ”‚ โ”‚ โ”‚ passive = symbol('PASSIVE_OFF') โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ state = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/orm/strategies.py:9 โ”‚ โ”‚ 78 in \_load_for_state โ”‚ โ”‚ โ”‚ โ”‚ 975 โ”‚ โ”‚ โ”‚ ): โ”‚ โ”‚ 976 โ”‚ โ”‚ โ”‚ โ”‚ return LoaderCallableStatus.PASSIVE_NO_RESULT โ”‚ โ”‚ 977 โ”‚ โ”‚ โ”‚ โ”‚ โฑ 978 โ”‚ โ”‚ return self.\_emit_lazyload( โ”‚ โ”‚ 979 โ”‚ โ”‚ โ”‚ session, โ”‚ โ”‚ 980 โ”‚ โ”‚ โ”‚ state, โ”‚ โ”‚ 981 โ”‚ โ”‚ โ”‚ primary_key_identity, โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ alternate_effective_path = None โ”‚ โ”‚ โ”‚ โ”‚ execution_options = immutabledict({}) โ”‚ โ”‚ โ”‚ โ”‚ extra_criteria = () โ”‚ โ”‚ โ”‚ โ”‚ extra_options = () โ”‚ โ”‚ โ”‚ โ”‚ instance = None โ”‚ โ”‚ โ”‚ โ”‚ loadopt = None โ”‚ โ”‚ โ”‚ โ”‚ passive = symbol('PASSIVE_OFF') โ”‚ โ”‚ โ”‚ โ”‚ pending = False โ”‚ โ”‚ โ”‚ โ”‚ primary_key_identity = [26] โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ session = โ”‚ โ”‚ โ”‚ โ”‚ state = โ”‚ โ”‚ โ”‚ โ”‚ use_get = True โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/orm/strategies.py:1 โ”‚ โ”‚ 079 in \_emit_lazyload โ”‚ โ”‚ โ”‚ โ”‚ 1076 โ”‚ โ”‚ โ”‚ if self.\_raise_on_sql and not passive & PassiveFlag.NO_RAISE: โ”‚ โ”‚ 1077 โ”‚ โ”‚ โ”‚ โ”‚ self.\_invoke_raise_load(state, passive, "raise_on_sql") โ”‚ โ”‚ 1078 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โฑ 1079 โ”‚ โ”‚ โ”‚ return loading.load_on_pk_identity( โ”‚ โ”‚ 1080 โ”‚ โ”‚ โ”‚ โ”‚ session, โ”‚ โ”‚ 1081 โ”‚ โ”‚ โ”‚ โ”‚ stmt, โ”‚ โ”‚ 1082 โ”‚ โ”‚ โ”‚ โ”‚ primary_key_identity, โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ alternate_effective_path = None โ”‚ โ”‚ โ”‚ โ”‚ clauseelement = Table('episodes', MetaData(), Column('id', Integer(), โ”‚ โ”‚ โ”‚ โ”‚ table=, primary_key=True, nullable=False), โ”‚ โ”‚ โ”‚ โ”‚ Column('series_id', Integer(), ForeignKey('anime_series.id'), โ”‚ โ”‚ โ”‚ โ”‚ table=, nullable=False), Column('season', Integer(), โ”‚ โ”‚ โ”‚ โ”‚ table=, nullable=False), Column('episode_number', โ”‚ โ”‚ โ”‚ โ”‚ Integer(), table=, nullable=False), Column('title', โ”‚ โ”‚ โ”‚ โ”‚ String(length=500), table=), Column('file_path', โ”‚ โ”‚ โ”‚ โ”‚ String(length=1000), table=), Column('is_downloaded', โ”‚ โ”‚ โ”‚ โ”‚ Boolean(), table=, nullable=False, โ”‚ โ”‚ โ”‚ โ”‚ default=ScalarElementColumnDefault(False)), Column('created_at', โ”‚ โ”‚ โ”‚ โ”‚ DateTime(timezone=True), table=, nullable=False, โ”‚ โ”‚ โ”‚ โ”‚ server_default=DefaultClause(, for_update=False)), Column('updated_at', โ”‚ โ”‚ โ”‚ โ”‚ DateTime(timezone=True), table=, nullable=False, โ”‚ โ”‚ โ”‚ โ”‚ onupdate=ColumnElementColumnDefault(), โ”‚ โ”‚ โ”‚ โ”‚ server_default=DefaultClause(, for_update=False)), schema=None) โ”‚ โ”‚ โ”‚ โ”‚ effective_path = PropRegistry((, โ”‚ โ”‚ โ”‚ โ”‚ <\_RelationshipDeclared at 0x7ed681866df0; episode>)) โ”‚ โ”‚ โ”‚ โ”‚ execution_options = immutabledict({}) โ”‚ โ”‚ โ”‚ โ”‚ extra_criteria = () โ”‚ โ”‚ โ”‚ โ”‚ extra_options = () โ”‚ โ”‚ โ”‚ โ”‚ load_options = default_load_options(\_invoke_all_eagers=False, โ”‚ โ”‚ โ”‚ โ”‚ \_lazy_loaded_from=) โ”‚ โ”‚ โ”‚ โ”‚ loadopt = None โ”‚ โ”‚ โ”‚ โ”‚ opts = ( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ โ”‚ โ”‚ passive = symbol('PASSIVE_OFF') โ”‚ โ”‚ โ”‚ โ”‚ pending = False โ”‚ โ”‚ โ”‚ โ”‚ primary_key_identity = [26] โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ session = โ”‚ โ”‚ โ”‚ โ”‚ state = โ”‚ โ”‚ โ”‚ โ”‚ stmt = โ”‚ โ”‚ โ”‚ โ”‚ strategy_options = โ”‚ โ”‚ โ”‚ โ”‚ \_get_params = { โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Column('id', Integer(), table=, primary_key=True, โ”‚ โ”‚ โ”‚ โ”‚ nullable=False): BindParameter('pk_1', None, type*=Integer()) โ”‚ โ”‚ โ”‚ โ”‚ } โ”‚ โ”‚ โ”‚ โ”‚ bind*arguments = immutabledict({}) โ”‚ โ”‚ โ”‚ โ”‚ compile_options = default_compile_options(\_current_path=PropRegistry((, <\_RelationshipDeclared at โ”‚ โ”‚ โ”‚ โ”‚ 0x7ed681866df0; episode>))) โ”‚ โ”‚ โ”‚ โ”‚ execution_options = immutabledict({'\_sa_orm_load_options': โ”‚ โ”‚ โ”‚ โ”‚ default_load_options(\_invoke_all_eagers=False, โ”‚ โ”‚ โ”‚ โ”‚ \_lazy_loaded_from=)}) โ”‚ โ”‚ โ”‚ โ”‚ identity_token = None โ”‚ โ”‚ โ”‚ โ”‚ is_user_refresh = False โ”‚ โ”‚ โ”‚ โ”‚ load_options = default_load_options(\_invoke_all_eagers=False, โ”‚ โ”‚ โ”‚ โ”‚ \_lazy_loaded_from=) โ”‚ โ”‚ โ”‚ โ”‚ mapper = โ”‚ โ”‚ โ”‚ โ”‚ new_compile_options = default_compile_options(\_current_path=PropRegistry((, <\_RelationshipDeclared at โ”‚ โ”‚ โ”‚ โ”‚ 0x7ed681866df0; episode>))) โ”‚ โ”‚ โ”‚ โ”‚ no_autoflush = False โ”‚ โ”‚ โ”‚ โ”‚ only_load_props = None โ”‚ โ”‚ โ”‚ โ”‚ params = {'pk_1': 26} โ”‚ โ”‚ โ”‚ โ”‚ primary_key_identity = [26] โ”‚ โ”‚ โ”‚ โ”‚ q = โ”‚ โ”‚ โ”‚ โ”‚ query = โ”‚ โ”‚ โ”‚ โ”‚ refresh_state = None โ”‚ โ”‚ โ”‚ โ”‚ require_pk_cols = False โ”‚ โ”‚ โ”‚ โ”‚ session = โ”‚ โ”‚ โ”‚ โ”‚ statement = โ”‚ โ”‚ โ”‚ โ”‚ version_check = False โ”‚ โ”‚ โ”‚ โ”‚ with_for_update = None โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/orm/session.py:2351 โ”‚ โ”‚ in execute โ”‚ โ”‚ โ”‚ โ”‚ 2348 โ”‚ โ”‚ โ”‚ โ”‚ 2349 โ”‚ โ”‚ โ”‚ โ”‚ 2350 โ”‚ โ”‚ """ โ”‚ โ”‚ โฑ 2351 โ”‚ โ”‚ return self.\_execute_internal( โ”‚ โ”‚ 2352 โ”‚ โ”‚ โ”‚ statement, โ”‚ โ”‚ 2353 โ”‚ โ”‚ โ”‚ params, โ”‚ โ”‚ 2354 โ”‚ โ”‚ โ”‚ execution_options=execution_options, โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ \_add_event = None โ”‚ โ”‚ โ”‚ โ”‚ \_parent_execute_state = None โ”‚ โ”‚ โ”‚ โ”‚ bind_arguments = immutabledict({}) โ”‚ โ”‚ โ”‚ โ”‚ execution_options = immutabledict({'\_sa_orm_load_options': โ”‚ โ”‚ โ”‚ โ”‚ default_load_options(\_invoke_all_eagers=False, โ”‚ โ”‚ โ”‚ โ”‚ \_lazy_loaded_from=)}) โ”‚ โ”‚ โ”‚ โ”‚ params = {'pk_1': 26} โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ statement = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/orm/session.py:2249 โ”‚ โ”‚ in \_execute_internal โ”‚ โ”‚ โ”‚ โ”‚ 2246 โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ 2247 โ”‚ โ”‚ โ”‚ โ”‚ 2248 โ”‚ โ”‚ if compile_state_cls: โ”‚ โ”‚ โฑ 2249 โ”‚ โ”‚ โ”‚ result: Result[Any] = compile_state_cls.orm_execute_statement( โ”‚ โ”‚ 2250 โ”‚ โ”‚ โ”‚ โ”‚ self, โ”‚ โ”‚ 2251 โ”‚ โ”‚ โ”‚ โ”‚ statement, โ”‚ โ”‚ 2252 โ”‚ โ”‚ โ”‚ โ”‚ params or {}, โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ \_add_event = None โ”‚ โ”‚ โ”‚ โ”‚ \_parent_execute_state = None โ”‚ โ”‚ โ”‚ โ”‚ \_scalar_result = False โ”‚ โ”‚ โ”‚ โ”‚ bind = Engine(sqlite+aiosqlite:///./data/aniworld.db) โ”‚ โ”‚ โ”‚ โ”‚ bind_arguments = { โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'clause': , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'mapper': โ”‚ โ”‚ โ”‚ โ”‚ } โ”‚ โ”‚ โ”‚ โ”‚ conn = โ”‚ โ”‚ โ”‚ โ”‚ events_todo = โ”‚ โ”‚ โ”‚ โ”‚ execution_options = immutabledict({'\_sa_orm_load_options': โ”‚ โ”‚ โ”‚ โ”‚ default_load_options(\_invoke_all_eagers=False, โ”‚ โ”‚ โ”‚ โ”‚ \_lazy_loaded_from=), '\_result_disable_adapt_to_context': True}) โ”‚ โ”‚ โ”‚ โ”‚ params = {'pk_1': 26} โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ statement = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/orm/context.py:306 โ”‚ โ”‚ in orm_execute_statement โ”‚ โ”‚ โ”‚ โ”‚ 303 โ”‚ โ”‚ bind_arguments, โ”‚ โ”‚ 304 โ”‚ โ”‚ conn, โ”‚ โ”‚ 305 โ”‚ ) -> Result: โ”‚ โ”‚ โฑ 306 โ”‚ โ”‚ result = conn.execute( โ”‚ โ”‚ 307 โ”‚ โ”‚ โ”‚ statement, params or {}, execution_options=execution_options โ”‚ โ”‚ 308 โ”‚ โ”‚ ) โ”‚ โ”‚ 309 โ”‚ โ”‚ return cls.orm_setup_cursor_result( โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ bind_arguments = { โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'clause': , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 'mapper': โ”‚ โ”‚ โ”‚ โ”‚ } โ”‚ โ”‚ โ”‚ โ”‚ conn = โ”‚ โ”‚ โ”‚ โ”‚ execution_options = immutabledict({'\_sa_orm_load_options': โ”‚ โ”‚ โ”‚ โ”‚ default_load_options(\_invoke_all_eagers=False, โ”‚ โ”‚ โ”‚ โ”‚ \_lazy_loaded_from=), '\_result_disable_adapt_to_context': True}) โ”‚ โ”‚ โ”‚ โ”‚ params = {'pk_1': 26} โ”‚ โ”‚ โ”‚ โ”‚ session = โ”‚ โ”‚ โ”‚ โ”‚ statement = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/engine/base.py:1419 โ”‚ โ”‚ in execute โ”‚ โ”‚ โ”‚ โ”‚ 1416 โ”‚ โ”‚ except AttributeError as err: โ”‚ โ”‚ 1417 โ”‚ โ”‚ โ”‚ raise exc.ObjectNotExecutableError(statement) from err โ”‚ โ”‚ 1418 โ”‚ โ”‚ else: โ”‚ โ”‚ โฑ 1419 โ”‚ โ”‚ โ”‚ return meth( โ”‚ โ”‚ 1420 โ”‚ โ”‚ โ”‚ โ”‚ self, โ”‚ โ”‚ 1421 โ”‚ โ”‚ โ”‚ โ”‚ distilled_parameters, โ”‚ โ”‚ 1422 โ”‚ โ”‚ โ”‚ โ”‚ execution_options or NO_OPTIONS, โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ distilled_parameters = [{'pk_1': 26}] โ”‚ โ”‚ โ”‚ โ”‚ execution_options = immutabledict({'\_sa_orm_load_options': โ”‚ โ”‚ โ”‚ โ”‚ default_load_options(\_invoke_all_eagers=False, โ”‚ โ”‚ โ”‚ โ”‚ \_lazy_loaded_from=), '\_result_disable_adapt_to_context': True}) โ”‚ โ”‚ โ”‚ โ”‚ meth = > โ”‚ โ”‚ โ”‚ โ”‚ parameters = {'pk_1': 26} โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ statement = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/sql/elements.py:526 โ”‚ โ”‚ in \_execute_on_connection โ”‚ โ”‚ โ”‚ โ”‚ 523 โ”‚ โ”‚ if self.supports_execution: โ”‚ โ”‚ 524 โ”‚ โ”‚ โ”‚ if TYPE_CHECKING: โ”‚ โ”‚ 525 โ”‚ โ”‚ โ”‚ โ”‚ assert isinstance(self, Executable) โ”‚ โ”‚ โฑ 526 โ”‚ โ”‚ โ”‚ return connection.\_execute_clauseelement( โ”‚ โ”‚ 527 โ”‚ โ”‚ โ”‚ โ”‚ self, distilled_params, execution_options โ”‚ โ”‚ 528 โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ 529 โ”‚ โ”‚ else: โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ connection = โ”‚ โ”‚ โ”‚ โ”‚ distilled_params = [{'pk_1': 26}] โ”‚ โ”‚ โ”‚ โ”‚ execution_options = immutabledict({'\_sa_orm_load_options': โ”‚ โ”‚ โ”‚ โ”‚ default_load_options(\_invoke_all_eagers=False, โ”‚ โ”‚ โ”‚ โ”‚ \_lazy_loaded_from=), '\_result_disable_adapt_to_context': True}) โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/engine/base.py:1641 โ”‚ โ”‚ in \_execute_clauseelement โ”‚ โ”‚ โ”‚ โ”‚ 1638 โ”‚ โ”‚ โ”‚ schema_translate_map=schema_translate_map, โ”‚ โ”‚ 1639 โ”‚ โ”‚ โ”‚ linting=self.dialect.compiler_linting | compiler.WARN_LINTING, โ”‚ โ”‚ 1640 โ”‚ โ”‚ ) โ”‚ โ”‚ โฑ 1641 โ”‚ โ”‚ ret = self.\_execute_context( โ”‚ โ”‚ 1642 โ”‚ โ”‚ โ”‚ dialect, โ”‚ โ”‚ 1643 โ”‚ โ”‚ โ”‚ dialect.execution_ctx_cls.\_init_compiled, โ”‚ โ”‚ 1644 โ”‚ โ”‚ โ”‚ compiled_sql, โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ cache_hit = โ”‚ โ”‚ โ”‚ โ”‚ compiled_cache = โ”‚ โ”‚ โ”‚ โ”‚ compiled_sql = โ”‚ โ”‚ โ”‚ โ”‚ dialect = โ”‚ โ”‚ โ”‚ โ”‚ distilled_parameters = [{'pk_1': 26}] โ”‚ โ”‚ โ”‚ โ”‚ elem = โ”‚ โ”‚ โ”‚ โ”‚ execution_options = immutabledict({'\_sa_orm_load_options': โ”‚ โ”‚ โ”‚ โ”‚ default_load_options(\_invoke_all_eagers=False, โ”‚ โ”‚ โ”‚ โ”‚ \_lazy_loaded_from=), '\_result_disable_adapt_to_context': True}) โ”‚ โ”‚ โ”‚ โ”‚ extracted_params = [AnnotatedBindParameter('pk_1', None, type*=Integer())] โ”‚ โ”‚ โ”‚ โ”‚ for*executemany = False โ”‚ โ”‚ โ”‚ โ”‚ has_events = False โ”‚ โ”‚ โ”‚ โ”‚ keys = ['pk_1'] โ”‚ โ”‚ โ”‚ โ”‚ schema_translate_map = None โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/engine/base.py:1846 โ”‚ โ”‚ in \_execute_context โ”‚ โ”‚ โ”‚ โ”‚ 1843 โ”‚ โ”‚ if context.execute_style is ExecuteStyle.INSERTMANYVALUES: โ”‚ โ”‚ 1844 โ”‚ โ”‚ โ”‚ return self.\_exec_insertmany_context(dialect, context) โ”‚ โ”‚ 1845 โ”‚ โ”‚ else: โ”‚ โ”‚ โฑ 1846 โ”‚ โ”‚ โ”‚ return self.\_exec_single_context( โ”‚ โ”‚ 1847 โ”‚ โ”‚ โ”‚ โ”‚ dialect, context, statement, parameters โ”‚ โ”‚ 1848 โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ 1849 โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ args = ( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ [{'pk_1': 26}], โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ [AnnotatedBindParameter('pk_1', None, type*=Integer())] โ”‚ โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ โ”‚ โ”‚ conn = โ”‚ โ”‚ โ”‚ โ”‚ constructor = โ”‚ โ”‚ โ”‚ โ”‚ dialect = โ”‚ โ”‚ โ”‚ โ”‚ execution_options = immutabledict({'\_sa_orm_load_options': โ”‚ โ”‚ โ”‚ โ”‚ default_load_options(\_invoke_all_eagers=False, โ”‚ โ”‚ โ”‚ โ”‚ \_lazy_loaded_from=), '\_result_disable_adapt_to_context': True}) โ”‚ โ”‚ โ”‚ โ”‚ kw = {'cache_hit': } โ”‚ โ”‚ โ”‚ โ”‚ parameters = [{'pk_1': 26}] โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ statement = โ”‚ โ”‚ โ”‚ โ”‚ yp = None โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/engine/base.py:1986 โ”‚ โ”‚ in \_exec_single_context โ”‚ โ”‚ โ”‚ โ”‚ 1983 โ”‚ โ”‚ โ”‚ result = context.\_setup_result_proxy() โ”‚ โ”‚ 1984 โ”‚ โ”‚ โ”‚ โ”‚ 1985 โ”‚ โ”‚ except BaseException as e: โ”‚ โ”‚ โฑ 1986 โ”‚ โ”‚ โ”‚ self.\_handle_dbapi_exception( โ”‚ โ”‚ 1987 โ”‚ โ”‚ โ”‚ โ”‚ e, str_statement, effective_parameters, cursor, context โ”‚ โ”‚ 1988 โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ 1989 โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ context = โ”‚ โ”‚ โ”‚ โ”‚ cursor = โ”‚ โ”‚ โ”‚ โ”‚ dialect = โ”‚ โ”‚ โ”‚ โ”‚ effective_parameters = (26,) โ”‚ โ”‚ โ”‚ โ”‚ evt_handled = False โ”‚ โ”‚ โ”‚ โ”‚ parameters = [(26,)] โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ statement = โ”‚ โ”‚ โ”‚ โ”‚ str_statement = 'SELECT episodes.id AS episodes_id, episodes.series_id AS โ”‚ โ”‚ โ”‚ โ”‚ episodes_series_id, epi'+335 โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/engine/base.py:2358 โ”‚ โ”‚ in \_handle_dbapi_exception โ”‚ โ”‚ โ”‚ โ”‚ 2355 โ”‚ โ”‚ โ”‚ โ”‚ raise sqlalchemy_exception.with_traceback(exc_info[2]) from e โ”‚ โ”‚ 2356 โ”‚ โ”‚ โ”‚ else: โ”‚ โ”‚ 2357 โ”‚ โ”‚ โ”‚ โ”‚ assert exc_info[1] is not None โ”‚ โ”‚ โฑ 2358 โ”‚ โ”‚ โ”‚ โ”‚ raise exc_info[1].with_traceback(exc_info[2]) โ”‚ โ”‚ 2359 โ”‚ โ”‚ finally: โ”‚ โ”‚ 2360 โ”‚ โ”‚ โ”‚ del self.\_reentrant_error โ”‚ โ”‚ 2361 โ”‚ โ”‚ โ”‚ if self.\_is_disconnect: โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ context = โ”‚ โ”‚ โ”‚ โ”‚ cursor = โ”‚ โ”‚ โ”‚ โ”‚ e = MissingGreenlet("greenlet*spawn has not been called; can't โ”‚ โ”‚ โ”‚ โ”‚ call await_only() here. Was IO attempted in an unexpected โ”‚ โ”‚ โ”‚ โ”‚ place?") โ”‚ โ”‚ โ”‚ โ”‚ exc_info = ( โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ MissingGreenlet("greenlet_spawn has not been called; โ”‚ โ”‚ โ”‚ โ”‚ can't call await_only() here. Was IO attempted in an โ”‚ โ”‚ โ”‚ โ”‚ unexpected place?"), โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ โ”‚ โ”‚ invalidate_pool_on_disconnect = True โ”‚ โ”‚ โ”‚ โ”‚ is_exit_exception = False โ”‚ โ”‚ โ”‚ โ”‚ is_sub_exec = False โ”‚ โ”‚ โ”‚ โ”‚ ismulti = False โ”‚ โ”‚ โ”‚ โ”‚ newraise = None โ”‚ โ”‚ โ”‚ โ”‚ parameters = (26,) โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ should_wrap = False โ”‚ โ”‚ โ”‚ โ”‚ sqlalchemy_exception = None โ”‚ โ”‚ โ”‚ โ”‚ statement = 'SELECT episodes.id AS episodes_id, episodes.series_id AS โ”‚ โ”‚ โ”‚ โ”‚ episodes_series_id, epi'+335 โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/engine/base.py:1967 โ”‚ โ”‚ in \_exec_single_context โ”‚ โ”‚ โ”‚ โ”‚ 1964 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ evt_handled = True โ”‚ โ”‚ 1965 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ break โ”‚ โ”‚ 1966 โ”‚ โ”‚ โ”‚ โ”‚ if not evt_handled: โ”‚ โ”‚ โฑ 1967 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ self.dialect.do_execute( โ”‚ โ”‚ 1968 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ cursor, str_statement, effective_parameters, context โ”‚ โ”‚ 1969 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ) โ”‚ โ”‚ 1970 โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ context = โ”‚ โ”‚ โ”‚ โ”‚ cursor = โ”‚ โ”‚ โ”‚ โ”‚ dialect = โ”‚ โ”‚ โ”‚ โ”‚ effective_parameters = (26,) โ”‚ โ”‚ โ”‚ โ”‚ evt_handled = False โ”‚ โ”‚ โ”‚ โ”‚ parameters = [(26,)] โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ statement = โ”‚ โ”‚ โ”‚ โ”‚ str_statement = 'SELECT episodes.id AS episodes_id, episodes.series_id AS โ”‚ โ”‚ โ”‚ โ”‚ episodes_series_id, epi'+335 โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/engine/default.py:9 โ”‚ โ”‚ 51 in do_execute โ”‚ โ”‚ โ”‚ โ”‚ 948 โ”‚ โ”‚ cursor.executemany(statement, parameters) โ”‚ โ”‚ 949 โ”‚ โ”‚ โ”‚ 950 โ”‚ def do_execute(self, cursor, statement, parameters, context=None): โ”‚ โ”‚ โฑ 951 โ”‚ โ”‚ cursor.execute(statement, parameters) โ”‚ โ”‚ 952 โ”‚ โ”‚ โ”‚ 953 โ”‚ def do_execute_no_params(self, cursor, statement, context=None): โ”‚ โ”‚ 954 โ”‚ โ”‚ cursor.execute(statement) โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ context = โ”‚ โ”‚ โ”‚ โ”‚ cursor = โ”‚ โ”‚ โ”‚ โ”‚ parameters = (26,) โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ statement = 'SELECT episodes.id AS episodes_id, episodes.series_id AS episodes_series_id, โ”‚ โ”‚ โ”‚ โ”‚ epi'+335 โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aio โ”‚ โ”‚ sqlite.py:180 in execute โ”‚ โ”‚ โ”‚ โ”‚ 177 โ”‚ โ”‚ โ”‚ else: โ”‚ โ”‚ 178 โ”‚ โ”‚ โ”‚ โ”‚ self.\_cursor = \_cursor # type: ignore[misc] โ”‚ โ”‚ 179 โ”‚ โ”‚ except Exception as error: โ”‚ โ”‚ โฑ 180 โ”‚ โ”‚ โ”‚ self.\_adapt_connection.\_handle_exception(error) โ”‚ โ”‚ 181 โ”‚ โ”‚ โ”‚ 182 โ”‚ def executemany( โ”‚ โ”‚ 183 โ”‚ โ”‚ self, โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ operation = 'SELECT episodes.id AS episodes_id, episodes.series_id AS episodes_series_id, โ”‚ โ”‚ โ”‚ โ”‚ epi'+335 โ”‚ โ”‚ โ”‚ โ”‚ parameters = (26,) โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aio โ”‚ โ”‚ sqlite.py:340 in \_handle_exception โ”‚ โ”‚ โ”‚ โ”‚ 337 โ”‚ โ”‚ โ”‚ โ”‚ "no active connection" โ”‚ โ”‚ 338 โ”‚ โ”‚ โ”‚ ) from error โ”‚ โ”‚ 339 โ”‚ โ”‚ else: โ”‚ โ”‚ โฑ 340 โ”‚ โ”‚ โ”‚ raise error โ”‚ โ”‚ 341 โ”‚ โ”‚ 342 โ”‚ โ”‚ 343 class AsyncAdaptFallback_aiosqlite_connection(AsyncAdapt_aiosqlite_connection): โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ error = MissingGreenlet("greenlet_spawn has not been called; can't call await_only() here. โ”‚ โ”‚ โ”‚ โ”‚ Was IO attempted in an unexpected place?") โ”‚ โ”‚ โ”‚ โ”‚ self = > โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aio โ”‚ โ”‚ sqlite.py:157 in execute โ”‚ โ”‚ โ”‚ โ”‚ 154 โ”‚ ) -> Any: โ”‚ โ”‚ 155 โ”‚ โ”‚ โ”‚ โ”‚ 156 โ”‚ โ”‚ try: โ”‚ โ”‚ โฑ 157 โ”‚ โ”‚ โ”‚ \_cursor: AsyncIODBAPICursor = self.await*(self._connection.cursor()) # type โ”‚ โ”‚ 158 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 159 โ”‚ โ”‚ โ”‚ if parameters is None: โ”‚ โ”‚ 160 โ”‚ โ”‚ โ”‚ โ”‚ self.await_(\_cursor.execute(operation)) โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ operation = 'SELECT episodes.id AS episodes_id, episodes.series_id AS episodes_series_id, โ”‚ โ”‚ โ”‚ โ”‚ epi'+335 โ”‚ โ”‚ โ”‚ โ”‚ parameters = (26,) โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/sqlalchemy/util/\_concurrency_p โ”‚ โ”‚ y3k.py:123 in await_only โ”‚ โ”‚ โ”‚ โ”‚ 120 โ”‚ if not getattr(current, "**sqlalchemy_greenlet_provider**", False): โ”‚ โ”‚ 121 โ”‚ โ”‚ \_safe_cancel_awaitable(awaitable) โ”‚ โ”‚ 122 โ”‚ โ”‚ โ”‚ โ”‚ โฑ 123 โ”‚ โ”‚ raise exc.MissingGreenlet( โ”‚ โ”‚ 124 โ”‚ โ”‚ โ”‚ "greenlet_spawn has not been called; can't call await_only() " โ”‚ โ”‚ 125 โ”‚ โ”‚ โ”‚ "here. Was IO attempted in an unexpected place?" โ”‚ โ”‚ 126 โ”‚ โ”‚ ) โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ awaitable = โ”‚ โ”‚ โ”‚ โ”‚ current = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ MissingGreenlet: greenlet_spawn has not been called; can't call await_only() here. Was IO attempted in an unexpected place? (Background on this error at: https://sqlalche.me/e/20/xd2s) The above exception was the direct cause of the following exception: โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ /home/lukas/Volume/repo/Aniworld/src/server/services/download_service.py:135 in initialize โ”‚ โ”‚ โ”‚ โ”‚ 132 โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ 133 โ”‚ โ”‚ โ”‚ # Load all items from database - they all start as PENDING โ”‚ โ”‚ 134 โ”‚ โ”‚ โ”‚ # since status is now managed in-memory only โ”‚ โ”‚ โฑ 135 โ”‚ โ”‚ โ”‚ all_items = await repository.get_all_items() โ”‚ โ”‚ 136 โ”‚ โ”‚ โ”‚ for item in all_items: โ”‚ โ”‚ 137 โ”‚ โ”‚ โ”‚ โ”‚ # All items from database are treated as pending โ”‚ โ”‚ 138 โ”‚ โ”‚ โ”‚ โ”‚ item.status = DownloadStatus.PENDING โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ e = QueueRepositoryError("Failed to get all items: greenlet_spawn has not been โ”‚ โ”‚ โ”‚ โ”‚ called; can't call await_only() here. Was IO attempted in an unexpected place? โ”‚ โ”‚ โ”‚ โ”‚ (Background on this error at: https://sqlalche.me/e/20/xd2s)") โ”‚ โ”‚ โ”‚ โ”‚ repository = โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ”‚ โ”‚ โ”‚ /home/lukas/Volume/repo/Aniworld/src/server/services/queue_repository.py:296 in get_all_items โ”‚ โ”‚ โ”‚ โ”‚ 293 โ”‚ โ”‚ โ”‚ โ”‚ 294 โ”‚ โ”‚ except Exception as e: โ”‚ โ”‚ 295 โ”‚ โ”‚ โ”‚ logger.error("Failed to get all items: %s", e) โ”‚ โ”‚ โฑ 296 โ”‚ โ”‚ โ”‚ raise QueueRepositoryError(f"Failed to get all items: {e}") from e โ”‚ โ”‚ 297 โ”‚ โ”‚ finally: โ”‚ โ”‚ 298 โ”‚ โ”‚ โ”‚ if manage_session: โ”‚ โ”‚ 299 โ”‚ โ”‚ โ”‚ โ”‚ await session.close() โ”‚ โ”‚ โ”‚ โ”‚ โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ โ”‚ โ”‚ โ”‚ db = None โ”‚ โ”‚ โ”‚ โ”‚ db_items = [ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ , โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ... +21 โ”‚ โ”‚ โ”‚ โ”‚ ] โ”‚ โ”‚ โ”‚ โ”‚ manage_session = True โ”‚ โ”‚ โ”‚ โ”‚ self = โ”‚ โ”‚ โ”‚ โ”‚ session = โ”‚ โ”‚ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ QueueRepositoryError: Failed to get all items: greenlet_spawn has not been called; can't call await_only() here. Was IO attempted in an unexpected place? (Background on this error at: https://sqlalche.me/e/20/xd2s) 2. fix add issue INFO: 127.0.0.1:54956 - "POST /api/anime/add HTTP/1.1" 500 ERROR: Exception in ASGI application Traceback (most recent call last): File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/anyio/streams/memory.py", line 98, in receive return self.receive_nowait() ~~~~~~~~~~~~~~~~~~~^^ File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/anyio/streams/memory.py", line 93, in receive_nowait raise WouldBlock anyio.WouldBlock During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/base.py", line 78, in call_next message = await recv_stream.receive() ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/anyio/streams/memory.py", line 118, in receive raise EndOfStream anyio.EndOfStream During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi result = await app( # type: ignore[func-returns-value] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ self.scope, self.receive, self.send ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in **call** return await self.app(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/fastapi/applications.py", line 1106, in **call** await super().**call**(scope, receive, send) File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/applications.py", line 122, in **call** await self.middleware_stack(scope, receive, send) File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/errors.py", line 184, in **call** raise exc File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/errors.py", line 162, in **call** await self.app(scope, receive, \_send) File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/base.py", line 108, in **call** response = await self.dispatch_func(request, call_next) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/lukas/Volume/repo/Aniworld/src/server/middleware/auth.py", line 209, in dispatch return await call_next(request) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/base.py", line 84, in call_next raise app_exc File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/base.py", line 70, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/base.py", line 108, in **call** response = await self.dispatch_func(request, call_next) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/lukas/Volume/repo/Aniworld/src/server/middleware/setup_redirect.py", line 147, in dispatch return await call_next(request) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/base.py", line 84, in call_next raise app_exc File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/base.py", line 70, in coro await self.app(scope, receive_or_disconnect, send_no_error) File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/cors.py", line 91, in **call** await self.simple_response(scope, receive, send, request_headers=headers) File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/cors.py", line 146, in simple_response await self.app(scope, receive, send) File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 79, in **call** raise exc File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 68, in **call** await self.app(scope, receive, sender) File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py", line 14, in **call** async with AsyncExitStack() as stack: ~~~~~~~~~~~~~~^^ File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/contextlib.py", line 768, in **aexit** raise exc File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/contextlib.py", line 751, in **aexit** cb_suppress = await cb(\*exc_details) ^^^^^^^^^^^^^^^^^^^^^^ File "/home/lukas/miniconda3/envs/AniWorld/lib/python3.13/contextlib.py", line 271, in **aexit** raise RuntimeError("generator didn't stop after athrow()") RuntimeError: generator didn't stop after athrow() 3. transactions go throw code and add transactions. so that application stops the db is not curropted