utils.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from django.core.mail import EmailMultiAlternatives
  2. from django.conf import settings
  3. from django.template.loader import render_to_string
  4. from catalog.constants import (
  5. FOREIGN, SHIPPING_METHODS_LIST, SHIPPING_METHODS, SHIPPING_METHOD_FOREIGN)
  6. from catalog.models import Subscription
  7. def valid_subscription_options(shipping_type):
  8. """ Returns a dictionary of valid values based on the type """
  9. options = dict(
  10. subscriptions=Subscription.objects.valid_options(
  11. shipping_type=shipping_type),
  12. durations=sorted(set(
  13. Subscription.objects.durations_value_list(
  14. shipping_type=shipping_type))),
  15. titles=sorted(set(Subscription.objects.titles_value_list(
  16. shipping_type=shipping_type))))
  17. return options
  18. def unique_tuples(values, reverse=False):
  19. """ Enumerate and remove duplicate sets of tuples """
  20. return [(i, value) for i, value in enumerate(sorted(set(values),
  21. reverse=reverse))]
  22. def unique_titles(shipping_type=None):
  23. """ Returns a unique set of tuples which can be used for title choices
  24. """
  25. return unique_tuples(Subscription.objects.titles_value_list(shipping_type))
  26. def unique_durations(shipping_type=None):
  27. """ Returns a unique set of tuples which can be used for duration choices
  28. """
  29. return unique_tuples(Subscription.objects.durations_value_list(
  30. shipping_type))
  31. def unique_shipping_methods():
  32. return [(i, value) for i, value in enumerate(SHIPPING_METHODS_LIST)]
  33. def unique_title_images():
  34. """ take set of title/images, flip them into a dictionary """
  35. title_images = {}
  36. subscriptions = Subscription.objects.title_images()
  37. for subscription in subscriptions:
  38. title_images.update({subscription['title']: subscription['image']})
  39. return title_images
  40. def get_value_by_index(value_tuple, index):
  41. return value_tuple[int(index)][1]
  42. def shipping_method_options(shipping_type):
  43. if shipping_type == FOREIGN:
  44. return SHIPPING_METHOD_FOREIGN
  45. return SHIPPING_METHODS