1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- from datetime import timedelta
- from django.utils import timezone
- from misago.conf import settings
- from misago.users.models import DataDownload
- from misago.users.signals import archive_user_data
- from .dataarchive import DataArchive
- STATUS_REQUEST = (DataDownload.STATUS_PENDING, DataDownload.STATUS_PROCESSING)
- def user_has_data_download_request(user):
- queryset = DataDownload.objects.filter(user=user, status__in=STATUS_REQUEST)
- return queryset.exists()
- def request_user_data_download(user, requester=None):
- requester = requester or user
- return DataDownload.objects.create(
- user=user,
- requester=requester,
- requester_name=requester.username,
- )
- def prepare_user_data_download(download, logger=None):
- working_dir = settings.MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR
- user = download.user
- with DataArchive(user, working_dir) as archive:
- try:
- archive_user_data.send(user, archive=archive)
- download.status = DataDownload.STATUS_READY
- download.expires_on = timezone.now() + timedelta(
- hours=settings.MISAGO_USER_DATA_DOWNLOADS_EXPIRE_IN_HOURS)
- download.file = archive.get_file()
- download.save()
- # todo: send an e-mail with download link
- return True
- except Exception as e:
- if logger:
- logger.exception(e)
- return False
- def expire_user_data_download(download):
- download.status = DataDownload.STATUS_EXPIRED
- if download.file:
- download.file.delete(save=False)
- download.save()
|