Exemplo n.º 1
0
    def _create(self, request, *args, **kwargs):
        """
        Handle creation. This is directly called by the @action on AppViewSet,
        allowing the URL to depend on the app id. AppViewSet passes this method
        a Webapp instance in kwargs['app'] (optionally raising a 404 if the
        app in the URL doesn't exist, or a 403 if the app belongs to someone
        else).

        Note: this method is called '_create' and not 'create' because DRF
        would automatically make an 'app-preview-list' url name if this
        method was called 'create', which we don't want - the app-preview-list
        url name needs to be generated by AppViewSet's @action to include the
        app pk.
        """
        app = kwargs['app']

        data_form = PreviewJSONForm(request.DATA)
        if not data_form.is_valid():
            return Response(data_form.errors, status=HTTP_400_BAD_REQUEST)

        form = PreviewForm(data_form.cleaned_data)
        if not form.is_valid():
            return Response(data_form.errors, status=HTTP_400_BAD_REQUEST)

        form.save(app)
        log.info('Preview created: %s' % form.instance)
        serializer = self.get_serializer(form.instance)
        return Response(serializer.data, status=HTTP_201_CREATED)
Exemplo n.º 2
0
    def obj_create(self, bundle, request, **kwargs):
        # Ensure that people don't pass strings through.
        args = PreviewArgsForm(request.GET)
        if not args.is_valid():
            raise self.form_errors(args)

        addon = self.get_object_or_404(Addon,
                                       pk=args.cleaned_data['app'],
                                       type=amo.ADDON_WEBAPP)
        if not AppOwnerAuthorization().is_authorized(request, object=addon):
            raise http_error(http.HttpForbidden,
                             'You are not an author of that app.')

        data_form = PreviewJSONForm(bundle.data)
        if not data_form.is_valid():
            raise self.form_errors(data_form)

        form = PreviewForm(data_form.cleaned_data)
        if not form.is_valid():
            raise self.form_errors(form)

        form.save(addon)
        bundle.obj = form.instance
        log.info('Preview created: %s' % bundle.obj.pk)
        return bundle
Exemplo n.º 3
0
 def test_position_missing(self):
     form = PreviewJSONForm(
         {'file': {
             'data': self.file,
             'type': 'image/jpg'
         }})
     assert not form.is_valid()
     eq_(form.errors['position'], ['This field is required.'])
Exemplo n.º 4
0
 def test_preview(self):
     form = PreviewJSONForm({
         'file': {
             'type': '',
             'data': ''
         },
         'position': 1
     })
     assert not form.is_valid()
     eq_(form.errors['file'], ['Images must be either PNG or JPG.'])
Exemplo n.º 5
0
 def test_bad_file(self):
     file_ = base64.b64encode(open(self.xpi_path('langpack'), 'r').read())
     form = PreviewJSONForm({
         'file': {
             'data': file_,
             'type': 'image/png'
         },
         'position': 1
     })
     assert not form.is_valid()
     eq_(form.errors['file'], ['Images must be either PNG or JPG.'])
Exemplo n.º 6
0
    def obj_create(self, bundle, request, **kwargs):
        addon = self.get_object_or_404(Webapp, pk=request.GET.get('app'))
        if not AppOwnerAuthorization().is_authorized(request, object=addon):
            raise ImmediateHttpResponse(response=http.HttpForbidden())

        data_form = PreviewJSONForm(bundle.data)
        if not data_form.is_valid():
            raise self.form_errors(data_form)

        form = PreviewForm(data_form.cleaned_data)
        if not form.is_valid():
            raise self.form_errors(form)

        form.save(addon)
        bundle.obj = form.instance
        log.info('Preview created: %s' % bundle.obj.pk)
        return bundle
Exemplo n.º 7
0
 def test_not_file(self):
     form = PreviewJSONForm({'position': 1})
     assert not form.is_valid()
     eq_(form.errors['file'], ['This field is required.'])
Exemplo n.º 8
0
 def test_not_json(self):
     form = PreviewJSONForm({'file': 1, 'position': 1})
     assert not form.is_valid()
     eq_(form.errors['file'], ['File must be a dictionary.'])