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

24 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 subprocess 

6 

7from celery.schedules import crontab 

8 

9from weblate.fonts.models import FONT_STORAGE, Font 

10from weblate.fonts.utils import configure_fontconfig 

11from weblate.trans.util import get_clean_env 

12from weblate.utils.celery import app 

13 

14 

15@app.task(trail=False) 

16def cleanup_font_files() -> None: 

17 """Remove stale fonts.""" 

18 try: 

19 files = FONT_STORAGE.listdir(".")[1] 

20 except OSError: 

21 return 

22 for name in files: 

23 if name == "fonts.conf": 

24 continue 

25 if not Font.objects.filter(font=name).exists(): 

26 FONT_STORAGE.delete(name) 

27 

28 

29@app.task(trail=False) 

30def update_fonts_cache() -> None: 

31 configure_fontconfig() 

32 subprocess.run( 

33 ["fc-cache"], 

34 env=get_clean_env(), 

35 check=True, 

36 capture_output=True, 

37 ) 

38 

39 

40@app.on_after_finalize.connect 

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

42 sender.add_periodic_task( 

43 crontab(hour=0, minute=55), cleanup_font_files.s(), name="font-files-cleanup" 

44 )