__init__.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from datetime import timedelta
  2. from django.utils import timezone
  3. from misago.conf import settings
  4. from misago.users.models import DataDownload
  5. from misago.users.signals import archive_user_data
  6. from .dataarchive import DataArchive
  7. STATUS_REQUEST = (DataDownload.STATUS_PENDING, DataDownload.STATUS_PROCESSING)
  8. def user_has_data_download_request(user):
  9. queryset = DataDownload.objects.filter(user=user, status__in=STATUS_REQUEST)
  10. return queryset.exists()
  11. def request_user_data_download(user, requester=None):
  12. requester = requester or user
  13. return DataDownload.objects.create(
  14. user=user, requester=requester, requester_name=requester.username
  15. )
  16. def prepare_user_data_download(download, logger=None):
  17. working_dir = settings.MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR
  18. user = download.user
  19. with DataArchive(user, working_dir) as archive:
  20. try:
  21. archive_user_data.send(user, archive=archive)
  22. download.status = DataDownload.STATUS_READY
  23. download.expires_on = timezone.now() + timedelta(
  24. hours=settings.MISAGO_USER_DATA_DOWNLOADS_EXPIRE_IN_HOURS
  25. )
  26. download.file = archive.get_file()
  27. download.save()
  28. # todo: send an e-mail with download link
  29. return True
  30. except Exception as e:
  31. if logger:
  32. logger.exception(e)
  33. return False
  34. def expire_user_data_download(download):
  35. download.status = DataDownload.STATUS_EXPIRED
  36. if download.file:
  37. download.file.delete(save=False)
  38. download.save()