css.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from ..models import Css
  2. from .utils import get_file_hash
  3. def create_css(theme, css):
  4. order = None
  5. if css_exists(theme, css):
  6. order = get_css_order(theme, css)
  7. delete_css(theme, css)
  8. save_css(theme, css, order)
  9. def css_exists(theme, css):
  10. return theme.css.filter(name=css.name).exists()
  11. def get_css_order(theme, css):
  12. return theme.css.get(name=css.name).order
  13. def delete_css(theme, css):
  14. theme.css.get(name=css.name).delete()
  15. def save_css(theme, css, order=None):
  16. if order is None:
  17. order = get_next_css_order(theme)
  18. theme.css.create(
  19. name=css.name,
  20. source_file=css,
  21. source_hash=get_file_hash(css),
  22. size=css.size,
  23. order=order,
  24. )
  25. def get_next_css_order(theme):
  26. last_css = theme.css.order_by("-order").last()
  27. if last_css:
  28. return last_css.order + 1
  29. return 0
  30. def move_css_up(theme, css):
  31. previous_css = theme.css.filter(order__lt=css.order).order_by("-order").first()
  32. if not previous_css:
  33. return False
  34. css.order, previous_css.order = previous_css.order, css.order
  35. css.save(update_fields=["order"])
  36. previous_css.save(update_fields=["order"])
  37. return True
  38. def move_css_down(theme, css):
  39. next_css = theme.css.filter(order__gt=css.order).order_by("order").first()
  40. if not next_css:
  41. return False
  42. css.order, next_css.order = next_css.order, css.order
  43. css.save(update_fields=["order"])
  44. next_css.save(update_fields=["order"])
  45. return True