prepareuserdatadownloads.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import logging
  2. from django.contrib.auth import get_user_model
  3. from django.core.management.base import BaseCommand
  4. from misago.conf import settings
  5. from misago.core.pgutils import chunk_queryset
  6. from misago.users.dataarchiver import DataArchiver
  7. from misago.users.models import DataDownload
  8. from misago.users.signals import archive_user_data
  9. logger = logging.getLogger('misago.users.datadownloads')
  10. UserModel = get_user_model()
  11. class Command(BaseCommand):
  12. help = "Prepares user data downloads."
  13. def handle(self, *args, **options):
  14. working_dir = settings.MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR
  15. if not working_dir:
  16. self.stdout.write(
  17. "MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR has to be set in order for "
  18. "this feature to work.")
  19. return
  20. downloads_prepared = 0
  21. queryset = DataDownload.objects.select_related('user')
  22. queryset = queryset.filter(status=DataDownload.STATUS_PENDING)
  23. for data_download in chunk_queryset(queryset):
  24. user = data_download.user
  25. data_archiver = DataArchiver(user, working_dir)
  26. try:
  27. archive_user_data.send(user, data_archiver=data_archiver)
  28. data_archiver.create_archive()
  29. #data_download.save()
  30. except Exception as e:
  31. print(e)
  32. logger.exception(e)
  33. # data_archiver.delete_archive()
  34. data_archiver.delete_tmp_dir()
  35. downloads_prepared += 1
  36. self.stdout.write("Data downloads prepared: {}".format(downloads_prepared))