Coverage for app/venv/lib/python3.14/site-packages/weblate/screenshots/tasks.py: 43%

19 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 07:15 +0000

1# Copyright © Michal Čihař <michal@weblate.org> 

2# 

3# SPDX-License-Identifier: GPL-3.0-or-later 

4 

5import os.path 

6 

7from celery.schedules import crontab 

8from django.core.files.storage import DefaultStorage 

9 

10from weblate.screenshots.models import Screenshot 

11from weblate.utils.celery import app 

12 

13 

14@app.task(trail=False) 

15def cleanup_screenshot_files() -> None: 

16 """Remove stale screenshots.""" 

17 storage = DefaultStorage() 

18 try: 

19 files = storage.listdir("screenshots")[1] 

20 except OSError: 

21 return 

22 for name in files: 

23 fullname = os.path.join("screenshots", name) 

24 if not Screenshot.objects.filter(image=fullname).exists(): 

25 storage.delete(fullname) 

26 

27 

28@app.on_after_finalize.connect 

29def setup_periodic_tasks(sender, **kwargs) -> None: 

30 sender.add_periodic_task( 

31 crontab(hour=0, minute=35), 

32 cleanup_screenshot_files.s(), 

33 name="screenshot-files-cleanup", 

34 )