prepareuserdatadownloads.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import logging
  2. from django.core.management.base import BaseCommand
  3. from django.utils.translation import gettext
  4. from misago.cache.versions import get_cache_versions
  5. from misago.conf import settings
  6. from misago.conf.dynamicsettings import DynamicSettings
  7. from misago.core.mail import mail_user
  8. from misago.core.pgutils import chunk_queryset
  9. from misago.users.datadownloads import prepare_user_data_download
  10. from misago.users.models import DataDownload
  11. logger = logging.getLogger('misago.users.datadownloads')
  12. class Command(BaseCommand):
  13. help = "Prepares user data downloads."
  14. leave_locale_alone = True
  15. def handle(self, *args, **options):
  16. working_dir = settings.MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR
  17. if not working_dir:
  18. self.stdout.write(
  19. "MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR has to be set in order for "
  20. "this feature to work.")
  21. return
  22. cache_versions = get_cache_versions()
  23. dynamic_settings = DynamicSettings(cache_versions)
  24. downloads_prepared = 0
  25. queryset = DataDownload.objects.select_related('user')
  26. queryset = queryset.filter(status=DataDownload.STATUS_PENDING)
  27. for data_download in chunk_queryset(queryset):
  28. if prepare_user_data_download(data_download, logger):
  29. user = data_download.user
  30. subject = gettext("%(user)s, your data download is ready") % { 'user': user }
  31. mail_user(user, subject, 'misago/emails/data_download', context={
  32. 'data_download': data_download,
  33. 'expires_in': settings.MISAGO_USER_DATA_DOWNLOADS_EXPIRE_IN_HOURS,
  34. "settings": dynamic_settings,
  35. })
  36. downloads_prepared += 1
  37. self.stdout.write("Data downloads prepared: %s" % downloads_prepared)