1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import os
- from django.contrib.auth import get_user_model
- from django.core.exceptions import ValidationError
- from misago.conf import settings
- from misago.users.avatars import store, gravatar, dynamic, gallery, uploaded
- from . import OLD_FORUM, defstdout, fetch_assoc, movedids
- UserModel = get_user_model()
- def move_avatars(stdout=None, style=None):
- stdout = stdout or defstdout
- for old_user in fetch_assoc('SELECT * FROM misago_user ORDER BY id'):
- user = UserModel.objects.get(pk=movedids.get('user', old_user['id']))
- if old_user['avatar_ban'] or old_user['avatar_type'] == 'gallery':
- dynamic.set_avatar(user)
- else:
- if old_user['avatar_type'] == 'gravatar':
- try:
- gravatar.set_avatar(user)
- except gravatar.GravatarError:
- dynamic.set_avatar(user)
- print_warning(
- '%s: failed to download Gravatar' % user, stdout, style)
- else:
- try:
- if not old_user['avatar_original'] or not old_user['avatar_crop']:
- raise ValidationError("Invalid avatar upload data.")
- image_path = os.path.join(
- OLD_FORUM['MEDIA'], 'avatars', old_user['avatar_original'])
- image = uploaded.validate_dimensions(image_path)
- cleaned_crop = convert_crop(image, old_user)
- uploaded.clean_crop(image, cleaned_crop)
- store.store_temporary_avatar(user, image)
- uploaded.crop_source_image(user, 'tmp', cleaned_crop)
- except ValidationError as e:
- dynamic.set_avatar(user)
- print_warning('%s: %s' % (user, e.args[0]), stdout, style)
- user.save()
- def print_warning(warning, stdout, style):
- if style:
- stdout.write(style.ERROR(warning))
- else:
- stdout.write(warning)
- def convert_crop(image, user):
- min_size = max(settings.MISAGO_AVATARS_SIZES)
- x, y, s = [float(v) for v in user['avatar_crop'].split(',')]
- zoom = min_size / s
- return {
- 'offset': {
- 'x': x * zoom * -1,
- 'y': y * zoom * -1,
- },
- 'zoom': zoom
- }
|