tasks.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import requests
  2. from celery import shared_task
  3. from requests.exceptions import RequestException
  4. from ..models import Theme, Css
  5. from .css import get_theme_media_map, rebuild_css
  6. @shared_task
  7. def update_remote_css_size(pk):
  8. try:
  9. css = Css.objects.get(pk=pk, url__isnull=False)
  10. except Css.DoesNotExist:
  11. pass
  12. else:
  13. css.size = get_remote_css_size(css.url)
  14. css.save(update_fields=["size"])
  15. def get_remote_css_size(url):
  16. try:
  17. response = requests.head(url)
  18. response.raise_for_status()
  19. except RequestException:
  20. return 0
  21. else:
  22. try:
  23. return int(response.headers.get("content-length", 0))
  24. except (TypeError, ValueError):
  25. return 0
  26. @shared_task
  27. def build_single_theme_css(pk):
  28. try:
  29. css = Css.objects.get(pk=pk, source_needs_building=True)
  30. except Css.DoesNotExist:
  31. pass
  32. else:
  33. media_map = get_theme_media_map(css.theme)
  34. rebuild_css(media_map, css)
  35. @shared_task
  36. def build_theme_css(pk):
  37. try:
  38. theme = Theme.objects.get(pk=pk)
  39. except Theme.DoesNotExist:
  40. pass
  41. else:
  42. media_map = get_theme_media_map(theme)
  43. for css in theme.css.filter(source_needs_building=True):
  44. rebuild_css(media_map, css)