def upload(self, addon, path):
     """Create FileUpload instance from local file."""
     self.info('Creating FileUpload...')
     package_file = open(path)
     package_size = os.stat(path).st_size
     upload = FileUpload()
     upload.user = addon.authors.all()[0]
     upload.add_file(package_file.read(), 'marketplace-package.zip',
                     package_size)
     self.info('Created FileUpload %s.' % upload)
     return upload
 def upload(self, addon, path):
     """Create FileUpload instance from local file."""
     self.info('Creating FileUpload...')
     package_file = open(path)
     package_size = os.stat(path).st_size
     upload = FileUpload()
     upload.user = addon.authors.all()[0]
     upload.add_file(package_file.read(), 'marketplace-package.zip',
                     package_size)
     self.info('Created FileUpload %s.' % upload)
     return upload
示例#3
0
    def test_ascii_names(self):
        fu = FileUpload.from_post('', u'mözball.zip', 0)
        assert 'zip' in fu.name

        fu = FileUpload.from_post('', u'мозила_србија-0.11.zip', 0)
        assert 'zip' in fu.name

        fu = FileUpload.from_post('', u'フォクすけといっしょ.zip', 0)
        assert 'zip' in fu.name

        fu = FileUpload.from_post('', u'\u05d0\u05d5\u05e1\u05e3.zip', 0)
        assert 'zip' in fu.name
示例#4
0
    def test_ascii_names(self):
        fu = FileUpload.from_post('', u'mözball.zip', 0)
        assert 'zip' in fu.name

        fu = FileUpload.from_post('', u'мозила_србија-0.11.zip', 0)
        assert 'zip' in fu.name

        fu = FileUpload.from_post('', u'フォクすけといっしょ.zip', 0)
        assert 'zip' in fu.name

        fu = FileUpload.from_post('', u'\u05d0\u05d5\u05e1\u05e3.zip', 0)
        assert 'zip' in fu.name
示例#5
0
 def get_upload(self, filename=None, abspath=None, validation=None):
     zip = open(abspath if abspath else self.file_path(filename)).read()
     upload = FileUpload.from_post([zip], filename=abspath or filename,
                                   size=1234)
     # Simulate what fetch_manifest() does after uploading an app.
     upload.validation = (validation or
                          json.dumps(dict(errors=0, warnings=1, notices=2,
                                          metadata={}, messages=[])))
     upload.save()
     return upload
示例#6
0
文件: views.py 项目: waseem18/zamboni
    def create(self, request, *args, **kwargs):
        file_obj = request.FILES.get('file', None)
        if not file_obj:
            raise exceptions.ParseError(_('Missing file in request.'))

        user = request.user if request.user.is_authenticated() else None
        # ExtensionValidator will raise ParseError exceptions if appropriate.
        ExtensionValidator(file_obj).validate()
        upload = FileUpload.from_post(
            file_obj, file_obj.name, file_obj.size, user=user)
        upload.update(valid=True)
        serializer = self.get_serializer(upload)
        return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
示例#7
0
文件: views.py 项目: wangeek/zamboni
    def create(self, request, *args, **kwargs):
        file_obj = request.FILES.get('file', None)
        if not file_obj:
            raise exceptions.ParseError(_('Missing file in request.'))

        user = request.user if request.user.is_authenticated() else None
        # ExtensionValidator will raise ParseError exceptions if appropriate.
        ExtensionValidator(file_obj).validate()
        upload = FileUpload.from_post(
            file_obj, file_obj.name, file_obj.size, user=user)
        upload.update(valid=True)
        serializer = self.get_serializer(upload)
        return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
示例#8
0
 def get_upload(self, filename=None, abspath=None, validation=None,
                user=None):
     zip = open(abspath).read()
     upload = FileUpload.from_post([zip], filename=abspath or filename,
                                   size=1234)
     # Simulate what fetch_manifest() does after uploading an app.
     upload.validation = (validation or
                          json.dumps(dict(errors=0, warnings=1, notices=2,
                                          metadata={}, messages=[])))
     if user:
         upload.user = user
     upload.save()
     return upload
示例#9
0
    def create(self, request, *args, **kwargs):
        file_obj = request.FILES.get('file', None)
        if not file_obj:
            raise exceptions.ParseError(_('Missing file in request.'))

        self.validate_upload(file_obj)  # Will raise exceptions if appropriate.
        user = request.user if request.user.is_authenticated() else None
        upload = FileUpload.from_post(
            file_obj, file_obj.name, file_obj.size, user=user)
        # FIXME: spawn validate task that does the real validation checks.
        # Right now we cheat and just set the upload as valid and processed
        # directly.
        upload.update(valid=True)
        serializer = self.get_serializer(upload)
        return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
示例#10
0
 def upload(self):
     # The data should be in chunks.
     data = [''.join(x) for x in chunked(self.data, 3)]
     return FileUpload.from_post(data, 'filename.zip', len(self.data))
示例#11
0
 def upload(self):
     # The data should be in chunks.
     data = [''.join(x) for x in chunked(self.data, 3)]
     return FileUpload.from_post(data, 'filename.zip', len(self.data))
示例#12
0
文件: forms.py 项目: waseem18/zamboni
class NewPackagedAppForm(happyforms.Form):
    upload = forms.FileField()

    def __init__(self, *args, **kwargs):
        self.max_size = kwargs.pop('max_size', MAX_PACKAGED_APP_SIZE)
        self.user = kwargs.pop('user', get_user())
        self.addon = kwargs.pop('addon', None)
        self.file_upload = None
        super(NewPackagedAppForm, self).__init__(*args, **kwargs)

    def clean_upload(self):
        upload = self.cleaned_data['upload']
        errors = []

        if upload.size > self.max_size:
            errors.append({
                'type': 'error',
                'message': _('Packaged app too large for submission. Packages '
                             'must be smaller than %s.' % filesizeformat(
                                 self.max_size)),
                'tier': 1,
            })
            # Immediately raise an error, do not process the rest of the view,
            # which would read the file.
            raise self.persist_errors(errors, upload)

        manifest = None
        try:
            # Be careful to keep this as in-memory zip reading.
            safe_zip = SafeUnzip(upload, 'r')
            safe_zip.is_valid()  # Will throw ValidationError if necessary.
            manifest = safe_zip.extract_path('manifest.webapp')
        except forms.ValidationError as e:
            errors.append({
                'type': 'error',
                'message': ''.join(e.messages),
                'tier': 1,
            })
        except Exception as e:
            errors.append({
                'type': 'error',
                'message': _('Error extracting manifest from zip file.'),
                'tier': 1,
            })
        finally:
            safe_zip.close()

        origin = None
        if manifest:
            try:
                origin = WebAppParser.decode_manifest(manifest).get('origin')
            except forms.ValidationError as e:
                errors.append({
                    'type': 'error',
                    'message': ''.join(e.messages),
                    'tier': 1,
                })

        if origin:
            try:
                verify_app_domain(origin, packaged=True, exclude=self.addon)
            except forms.ValidationError, e:
                errors.append({
                    'type': 'error',
                    'message': ''.join(e.messages),
                    'tier': 1,
                })

        if errors:
            raise self.persist_errors(errors, upload)

        # Everything passed validation.
        self.file_upload = FileUpload.from_post(
            upload, upload.name, upload.size, user=self.user)