diff --git a/seahub/api2/endpoints/user_avatar.py b/seahub/api2/endpoints/user_avatar.py index 61092df02f..12a8c3bea8 100644 --- a/seahub/api2/endpoints/user_avatar.py +++ b/seahub/api2/endpoints/user_avatar.py @@ -18,6 +18,7 @@ from seahub.avatar.models import Avatar from seahub.avatar.signals import avatar_updated from seahub.avatar.settings import (AVATAR_MAX_AVATARS_PER_USER, AVATAR_MAX_SIZE, AVATAR_ALLOWED_FILE_EXTS) +from seahub.avatar.templatetags.avatar_tags import api_avatar_url logger = logging.getLogger(__name__) @@ -29,10 +30,19 @@ class UserAvatarView(APIView): def post(self, request): image_file = request.FILES.get('avatar', None) + avatar_size = request.data.get('avatar_size', 64) + if not image_file: error_msg = 'avatar invalid.' return api_error(status.HTTP_400_BAD_REQUEST, error_msg) + try: + avatar_size = int(avatar_size) + except Exception as e: + logger.error(e) + error_msg = 'avatar_size invalid.' + return api_error(status.HTTP_400_BAD_REQUEST, error_msg) + (root, ext) = os.path.splitext(image_file.name.lower()) if AVATAR_ALLOWED_FILE_EXTS and ext not in AVATAR_ALLOWED_FILE_EXTS: error_msg = _(u"%(ext)s is an invalid file extension. Authorized extensions are : %(valid_exts_list)s") % {'ext' : ext, 'valid_exts_list' : ", ".join(AVATAR_ALLOWED_FILE_EXTS)} @@ -56,9 +66,10 @@ class UserAvatarView(APIView): avatar.avatar.save(image_file.name, image_file) avatar.save() avatar_updated.send(sender=Avatar, user=request.user, avatar=avatar) + avatar_url, is_default, date_uploaded = api_avatar_url(username, int(avatar_size)) except Exception as e: logger.error(e) error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) - return Response({'success': True}) + return Response({'avatar_url': avatar_url}) diff --git a/tests/api/endpoints/test_user_avatar.py b/tests/api/endpoints/test_user_avatar.py index 1535a5bd09..ce605bd605 100644 --- a/tests/api/endpoints/test_user_avatar.py +++ b/tests/api/endpoints/test_user_avatar.py @@ -1,4 +1,5 @@ import os +import random from tests.api.apitestbase import ApiTestBase from tests.api.urls import AVATAR_BASE_URL from tests.common.utils import urljoin @@ -14,10 +15,15 @@ class AvatarApiTest(ApiTestBase): avatar_url = urljoin(BASE_URL, avatar_url) avatar_file = os.path.join(os.getcwd(), 'media/img/seafile-logo.png') - with open(avatar_file) as f: - json_resp = self.post(avatar_url, files={'avatar': f}).json() + random_avatar_size = random.randint(12,128) - assert json_resp['success'] == True + with open(avatar_file) as f: + json_resp = self.post(avatar_url, files={'avatar': f}, data={'avatar_size': random_avatar_size}).json() + + assert json_resp.has_key('avatar_url') + response_url = json_resp['avatar_url'] + list_url = response_url.split('/') + assert str(random_avatar_size) in list_url # assert is NOT default avatar avatar_url = urljoin(AVATAR_BASE_URL, 'user', self.username, '/resized/80/')