Esempio n. 1
0
 def get(self, request):
     """edit profile page for a user"""
     data = {
         "form": forms.EditUserForm(instance=request.user),
         "user": request.user,
     }
     return TemplateResponse(request, "preferences/edit_user.html", data)
Esempio n. 2
0
    def test_edit_user_avatar(self, _):
        """use a form to update a user"""
        view = views.EditUser.as_view()
        form = forms.EditUserForm(instance=self.local_user)
        form.data["name"] = "New Name"
        form.data["email"] = "*****@*****.**"
        form.data["default_post_privacy"] = "public"
        form.data["preferred_timezone"] = "UTC"
        image_file = pathlib.Path(__file__).parent.joinpath(
            "../../../static/images/no_cover.jpg")
        # pylint: disable=consider-using-with
        form.data["avatar"] = SimpleUploadedFile(image_file,
                                                 open(image_file, "rb").read(),
                                                 content_type="image/jpeg")
        request = self.factory.post("", form.data)
        request.user = self.local_user

        with patch(
                "bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"
        ) as delay_mock:
            view(request)
            self.assertEqual(delay_mock.call_count, 1)
        self.assertEqual(self.local_user.name, "New Name")
        self.assertEqual(self.local_user.email, "*****@*****.**")
        self.assertIsNotNone(self.local_user.avatar)
        self.assertEqual(self.local_user.avatar.width, 120)
        self.assertEqual(self.local_user.avatar.height, 120)
Esempio n. 3
0
 def get(self, request):
     ''' edit profile page for a user '''
     data = {
         'title': 'Edit profile',
         'form': forms.EditUserForm(instance=request.user),
         'user': request.user,
     }
     return TemplateResponse(request, 'preferences/edit_user.html', data)
Esempio n. 4
0
    def post(self, request):
        """les get fancy with images"""
        form = forms.EditUserForm(request.POST, request.FILES, instance=request.user)
        if not form.is_valid():
            data = {"form": form, "user": request.user}
            return TemplateResponse(request, "preferences/edit_user.html", data)

        user = save_user_form(form)

        return redirect(user.local_path)
Esempio n. 5
0
def edit_profile_page(request):
    ''' profile page for a user '''
    user = request.user

    form = forms.EditUserForm(instance=request.user)
    data = {
        'title': 'Edit profile',
        'form': form,
        'user': user,
    }
    return TemplateResponse(request, 'edit_user.html', data)
Esempio n. 6
0
def edit_profile(request):
    ''' les get fancy with images '''
    if not request.method == 'POST':
        return redirect('/user/%s' % request.user.localname)

    form = forms.EditUserForm(request.POST, request.FILES)
    if not form.is_valid():
        data = {
            'form': form,
            'user': request.user,
        }
        return TemplateResponse(request, 'edit_user.html', data)

    request.user.name = form.data['name']
    request.user.email = form.data['email']
    if 'avatar' in form.files:
        # crop and resize avatar upload
        image = Image.open(form.files['avatar'])
        target_size = 120
        width, height = image.size
        thumbnail_scale = height / (width / target_size) if height > width \
            else width / (height / target_size)
        image.thumbnail([thumbnail_scale, thumbnail_scale])
        width, height = image.size

        width_diff = width - target_size
        height_diff = height - target_size
        cropped = image.crop((
            int(width_diff / 2),
            int(height_diff / 2),
            int(width - (width_diff / 2)),
            int(height - (height_diff / 2))
        ))
        output = BytesIO()
        cropped.save(output, format=image.format)
        ContentFile(output.getvalue())

        # set the name to a hash
        extension = form.files['avatar'].name.split('.')[-1]
        filename = '%s.%s' % (uuid4(), extension)
        request.user.avatar.save(
            filename,
            ContentFile(output.getvalue())
        )

    request.user.summary = form.data['summary']
    request.user.manually_approves_followers = \
        form.cleaned_data['manually_approves_followers']
    request.user.save()

    outgoing.handle_update_user(request.user)
    return redirect('/user/%s' % request.user.localname)
Esempio n. 7
0
    def test_edit_user(self):
        """ use a form to update a user """
        view = views.EditUser.as_view()
        form = forms.EditUserForm(instance=self.local_user)
        form.data["name"] = "New Name"
        form.data["email"] = "*****@*****.**"
        request = self.factory.post("", form.data)
        request.user = self.local_user

        self.assertIsNone(self.local_user.name)
        with patch("bookwyrm.models.activitypub_mixin.broadcast_task.delay"
                   ) as delay_mock:
            view(request)
            self.assertEqual(delay_mock.call_count, 1)
        self.assertEqual(self.local_user.name, "New Name")
        self.assertEqual(self.local_user.email, "*****@*****.**")
Esempio n. 8
0
    def test_edit_user(self):
        ''' use a form to update a user '''
        view = views.EditUser.as_view()
        form = forms.EditUserForm(instance=self.local_user)
        form.data['name'] = 'New Name'
        form.data['email'] = '*****@*****.**'
        request = self.factory.post('', form.data)
        request.user = self.local_user

        self.assertIsNone(self.local_user.name)
        with patch('bookwyrm.models.activitypub_mixin.broadcast_task.delay') \
                as delay_mock:
            view(request)
            self.assertEqual(delay_mock.call_count, 1)
        self.assertEqual(self.local_user.name, 'New Name')
        self.assertEqual(self.local_user.email, '*****@*****.**')
Esempio n. 9
0
    def post(self, request):
        ''' les get fancy with images '''
        form = forms.EditUserForm(
            request.POST, request.FILES, instance=request.user)
        if not form.is_valid():
            data = {'form': form, 'user': request.user}
            return TemplateResponse(request, 'preferences/edit_user.html', data)

        user = form.save(commit=False)

        if 'avatar' in form.files:
            # crop and resize avatar upload
            image = Image.open(form.files['avatar'])
            image = crop_avatar(image)

            # set the name to a hash
            extension = form.files['avatar'].name.split('.')[-1]
            filename = '%s.%s' % (uuid4(), extension)
            user.avatar.save(filename, image)
        user.save()

        return redirect(user.local_path)
Esempio n. 10
0
    def post(self, request):
        """ les get fancy with images """
        form = forms.EditUserForm(request.POST,
                                  request.FILES,
                                  instance=request.user)
        if not form.is_valid():
            data = {"form": form, "user": request.user}
            return TemplateResponse(request, "preferences/edit_user.html",
                                    data)

        user = form.save(commit=False)

        if "avatar" in form.files:
            # crop and resize avatar upload
            image = Image.open(form.files["avatar"])
            image = crop_avatar(image)

            # set the name to a hash
            extension = form.files["avatar"].name.split(".")[-1]
            filename = "%s.%s" % (uuid4(), extension)
            user.avatar.save(filename, image)
        user.save()

        return redirect(user.local_path)