Initial commit
Some checks failed
Build and Publish Docker Images / build (server.Dockerfile, ${{ vars.IMAGE_NAME_SERVER }}) (push) Has been cancelled
Build and Publish Docker Images / build (server.Dockerfile, ${{ vars.IMAGE_NAME_WORKER }}) (push) Has been cancelled
Build and Publish Docker Images / build (worker.Dockerfile, ${{ vars.IMAGE_NAME_SERVER }}) (push) Has been cancelled
Build and Publish Docker Images / build (worker.Dockerfile, ${{ vars.IMAGE_NAME_WORKER }}) (push) Has been cancelled
Build and Publish Docker Images / setup (push) Has been cancelled
Some checks failed
Build and Publish Docker Images / build (server.Dockerfile, ${{ vars.IMAGE_NAME_SERVER }}) (push) Has been cancelled
Build and Publish Docker Images / build (server.Dockerfile, ${{ vars.IMAGE_NAME_WORKER }}) (push) Has been cancelled
Build and Publish Docker Images / build (worker.Dockerfile, ${{ vars.IMAGE_NAME_SERVER }}) (push) Has been cancelled
Build and Publish Docker Images / build (worker.Dockerfile, ${{ vars.IMAGE_NAME_WORKER }}) (push) Has been cancelled
Build and Publish Docker Images / setup (push) Has been cancelled
This commit is contained in:
commit
68f6e85c78
17 changed files with 1286 additions and 0 deletions
49
src/auto_transcoder/tasks.py
Normal file
49
src/auto_transcoder/tasks.py
Normal file
|
@ -0,0 +1,49 @@
|
|||
import os
|
||||
from pathlib import Path
|
||||
|
||||
import asyncio
|
||||
from celery import Celery
|
||||
from celery.signals import worker_init, worker_shutdown
|
||||
from celery.utils.log import get_task_logger
|
||||
|
||||
from auto_transcoder.model import MediaDAO, RedisManager
|
||||
from auto_transcoder.services import transcode_media
|
||||
|
||||
redis_manager: RedisManager | None = None
|
||||
logger = get_task_logger(__name__)
|
||||
|
||||
celery_app = Celery('auto_transcoder', config_source='auto_transcoder.celeryconfig')
|
||||
|
||||
@worker_init.connect
|
||||
def setup_worker(**kwargs):
|
||||
global redis_manager
|
||||
redis_manager = RedisManager(os.environ.get("REDIS_URL", "redis://localhost:6379/0"))
|
||||
|
||||
@worker_shutdown.connect
|
||||
def teardown_worker(**kwargs):
|
||||
asyncio.run(__teardown_worker())
|
||||
|
||||
async def __teardown_worker():
|
||||
global redis_manager
|
||||
if redis_manager:
|
||||
await redis_manager.close()
|
||||
redis_manager = None
|
||||
|
||||
@celery_app.task(ignore_result=True)
|
||||
def transcode_media_task(inode: int, recycle_bin_path: str | None = None):
|
||||
async def process(inode: int, recycle_bin_path: str | None = None):
|
||||
global redis_manager
|
||||
if not redis_manager:
|
||||
raise RuntimeError("RedisManager is not initialized")
|
||||
async with redis_manager as manager:
|
||||
media_dao = MediaDAO(manager)
|
||||
media_dto = await media_dao.get_media_by_inode(inode)
|
||||
if not media_dto.is_transcoded:
|
||||
logger.info(f"Transcoding media with inode {inode}")
|
||||
new_medias = await transcode_media(media_dto, Path.from_uri(recycle_bin_path) if recycle_bin_path else None)
|
||||
if new_medias:
|
||||
await asyncio.gather(
|
||||
media_dao.batch_set_media(new_medias),
|
||||
media_dao.delete_media(media_dto),
|
||||
)
|
||||
asyncio.run(process(inode, recycle_bin_path))
|
Loading…
Add table
Add a link
Reference in a new issue