__init__.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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,
  15. requester=requester,
  16. requester_name=requester.username,
  17. )
  18. def prepare_user_data_download(download, logger=None):
  19. working_dir = settings.MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR
  20. user = download.user
  21. with DataArchive(user, working_dir) as archive:
  22. try:
  23. archive_user_data.send(user, archive=archive)
  24. download.status = DataDownload.STATUS_READY
  25. download.expires_on = timezone.now() + timedelta(
  26. hours=settings.MISAGO_USER_DATA_DOWNLOADS_EXPIRE_IN_HOURS)
  27. download.file = archive.get_file()
  28. download.save()
  29. # todo: send an e-mail with download link
  30. return True
  31. except Exception as e:
  32. if logger:
  33. logger.exception(e)
  34. return False
  35. def expire_user_data_download(download):
  36. download.status = DataDownload.STATUS_EXPIRED
  37. if download.file:
  38. download.file.delete(save=False)
  39. download.save()