123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import logging
- from django.contrib.auth import get_user_model
- from django.core.management.base import BaseCommand
- from misago.conf import settings
- from misago.core.pgutils import chunk_queryset
- from misago.users.datacollector import DataCollector
- from misago.users.models import DataDownload
- logger = logging.getLogger('misago.users.datadownloads')
- UserModel = get_user_model()
- class Command(BaseCommand):
- help = "Prepares user data downloads."
- def handle(self, *args, **options):
- working_dir = settings.MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR
- if not working_dir:
- self.stdout.write(
- "MISAGO_USER_DATA_DOWNLOADS_WORKING_DIR has to be set in order for "
- "this feature to work.")
- return
-
- downloads_prepared = 0
- queryset = DataDownload.objects.select_related('user')
- queryset = queryset.filter(status=DataDownload.STATUS_PENDING)
- for data_download in chunk_queryset(queryset):
- data_collector = DataCollector(data_download.user, working_dir)
- try:
- collect_user_data(data_download.user, data_collector)
- data_collector.create_archive()
- data_download.save()
- except Exception as e:
- print(e)
- logger.exception(e)
- data_collector.delete_tmp_dir()
- downloads_prepared += 1
- self.stdout.write("Data downloads prepared: {}".format(downloads_prepared))
- def collect_user_data(user, data_collector):
- data_collector.write_json_file('details', {
- 'username': user.username,
- 'email': user.email,
- })
- avatars = data_collector.create_collection('avatars')
- avatars.write_file(user.avatar_tmp)
- avatars.write_file(user.avatar_src)
- for avatar in user.avatar_set.iterator():
- avatars.write_file(avatar.image)
|