prepareuserdatadownloads.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import logging
  2. from django.core.management.base import BaseCommand
  3. from django.utils.translation import gettext
  4. from ....cache.versions import get_cache_versions
  5. from ....conf import settings
  6. from ....conf.dynamicsettings import DynamicSettings
  7. from ....core.mail import mail_user
  8. from ....core.pgutils import chunk_queryset
  9. from ...datadownloads import prepare_user_data_download
  10. from ...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. )
  22. return
  23. cache_versions = get_cache_versions()
  24. dynamic_settings = DynamicSettings(cache_versions)
  25. expires_in = settings.MISAGO_USER_DATA_DOWNLOADS_EXPIRE_IN_HOURS
  26. downloads_prepared = 0
  27. queryset = DataDownload.objects.select_related("user")
  28. queryset = queryset.filter(status=DataDownload.STATUS_PENDING)
  29. for data_download in chunk_queryset(queryset):
  30. if prepare_user_data_download(data_download, logger):
  31. user = data_download.user
  32. subject = gettext("%(user)s, your data download is ready") % {
  33. "user": user
  34. }
  35. mail_user(
  36. user,
  37. subject,
  38. "misago/emails/data_download",
  39. context={
  40. "data_download": data_download,
  41. "expires_in": expires_in,
  42. "settings": dynamic_settings,
  43. },
  44. )
  45. downloads_prepared += 1
  46. self.stdout.write("Data downloads prepared: %s" % downloads_prepared)