prepareuserdatadownloads.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import logging
  2. from django.core.management.base import BaseCommand
  3. from django.utils.translation import gettext
  4. from ....conf import settings
  5. from ....conf.shortcuts import get_dynamic_settings
  6. from ....core.mail import mail_user
  7. from ....core.pgutils import chunk_queryset
  8. from ...datadownloads import prepare_user_data_download
  9. from ...models import DataDownload
  10. logger = logging.getLogger("misago.users.datadownloads")
  11. class Command(BaseCommand):
  12. help = "Prepares user data downloads."
  13. leave_locale_alone = True
  14. def handle(self, *args, **options):
  15. working_dir = settings.MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR
  16. if not working_dir:
  17. self.stdout.write(
  18. "MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR has to be set in order for "
  19. "this feature to work."
  20. )
  21. return
  22. dynamic_settings = get_dynamic_settings()
  23. expires_in = dynamic_settings.data_downloads_expiration
  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, expires_in, logger):
  29. user = data_download.user
  30. subject = gettext("%(user)s, your data download is ready") % {
  31. "user": user
  32. }
  33. mail_user(
  34. user,
  35. subject,
  36. "misago/emails/data_download",
  37. context={
  38. "data_download": data_download,
  39. "expires_in": expires_in,
  40. "settings": dynamic_settings,
  41. },
  42. )
  43. downloads_prepared += 1
  44. self.stdout.write("Data downloads prepared: %s" % downloads_prepared)