Exemple #1
0
 def _process(self):
     files = request.files.getlist('file')
     for f in files:
         filename = secure_filename(f.filename, 'image')
         data = BytesIO()
         shutil.copyfileobj(f, data)
         data.seek(0)
         try:
             image_type = Image.open(data).format.lower()
         except IOError:
             # Invalid image data
             continue
         data.seek(0)
         if image_type not in {'jpeg', 'gif', 'png'}:
             continue
         content_type = 'image/' + image_type
         image = ImageFile(event_new=self.event_new,
                           filename=filename,
                           content_type=content_type)
         image.save(data)
         db.session.flush()
         logger.info('Image %s uploaded by %s', image, session.user)
         signals.event_management.image_created.send(image,
                                                     user=session.user)
     flash(
         ngettext("The image has been uploaded",
                  "{count} images have been uploaded",
                  len(files)).format(count=len(files)), 'success')
     return jsonify_data(image_list=_render_image_list(self._conf))
Exemple #2
0
 def _process(self):
     files = request.files.getlist('image')
     num = 0
     for f in files:
         filename = secure_client_filename(f.filename)
         data = BytesIO()
         shutil.copyfileobj(f, data)
         data.seek(0)
         try:
             image_type = Image.open(data).format.lower()
         except OSError:
             # Invalid image data
             continue
         data.seek(0)
         # XXX: mpo is basically JPEG and JPEGs from some cameras are (wrongfully) detected as mpo
         if image_type == 'mpo':
             image_type = 'jpeg'
         elif image_type not in {'jpeg', 'gif', 'png'}:
             flash(_("The image '{name}' has an invalid type ({type}); only JPG, GIF and PNG are allowed.")
                   .format(name=f.filename, type=image_type), 'error')
             continue
         content_type = 'image/' + image_type
         image = ImageFile(event=self.event, filename=filename, content_type=content_type)
         image.save(data)
         num += 1
         db.session.flush()
         logger.info('Image %s uploaded by %s', image, session.user)
         signals.event_management.image_created.send(image, user=session.user)
     flash(ngettext('The image has been uploaded', '{count} images have been uploaded', num)
           .format(count=len(files)), 'success')
     return jsonify_data(image_list=_render_image_list(self.event))
Exemple #3
0
    def migrate(self):
        for picture in self._iter_pictures(self.conf):
            local_file = picture._localFile
            content_type = mimetypes.guess_type(local_file.fileName)[0] or 'application/octet-stream'
            storage_backend, storage_path, size, md5 = self._get_local_file_info(local_file)

            if storage_path is None:
                self.print_warning('%[yellow][{}]%[reset] -> %[red!]Not found in filesystem'.format(
                    local_file.id))
                continue

            filename = secure_filename(convert_to_unicode(local_file.fileName), 'image')
            image = ImageFile(event_id=self.event.id,
                              filename=filename,
                              content_type=content_type,
                              created_dt=now_utc(),
                              size=size,
                              md5=md5,
                              storage_backend=storage_backend,
                              storage_file_id=storage_path)

            map_entry = LegacyImageMapping(event_id=self.event.id, legacy_image_id=local_file.id, image=image)
            db.session.add(image)
            db.session.add(map_entry)

            if not self.quiet:
                self.print_success('%[cyan][{}]%[reset] -> %[blue!]{}'.format(local_file.id, image))
Exemple #4
0
    def migrate_event_images(self):
        self.print_step('migrating event images')
        for event, picture in committing_iterator(self._iter_pictures()):
            local_file = picture._localFile
            content_type = mimetypes.guess_type(local_file.fileName)[0] or 'application/octet-stream'
            storage_backend, storage_path, size = self._get_local_file_info(local_file)

            if storage_path is None:
                self.print_warning(cformat('%{yellow}[{}]%{reset} -> %{red!}Not found in filesystem').format(
                    local_file.id), event_id=event.id)
                continue

            filename = secure_filename(convert_to_unicode(local_file.fileName), 'image')
            image = ImageFile(event_id=event.id,
                              filename=filename,
                              content_type=content_type,
                              created_dt=now_utc(),
                              size=size,
                              storage_backend=storage_backend,
                              storage_file_id=storage_path)

            db.session.add(image)
            db.session.flush()

            map_entry = LegacyImageMapping(event_id=event.id, legacy_image_id=local_file.id, image_id=image.id)

            db.session.add(map_entry)

            if not self.quiet:
                self.print_success(cformat('%{cyan}[{}]%{reset} -> %{blue!}{}').format(local_file.id, image),
                                   event_id=event.id)
Exemple #5
0
 def run(self, new_event, cloners, shared_data):
     from indico.modules.events.layout.models.images import ImageFile
     for old_image in self._find_images():
         new_image = ImageFile(filename=old_image.filename, content_type=old_image.content_type)
         new_event.layout_images.append(new_image)
         with old_image.open() as fd:
             new_image.save(fd)
         db.session.flush()
Exemple #6
0
 def clone(self, new_event, options):
     from indico.modules.events.layout.models.images import ImageFile
     if 'images' not in options:
         return
     for old_image in get_images_for_event(self.event):
         new_image = ImageFile(event_id=new_event.id,
                               filename=old_image.filename,
                               content_type=old_image.content_type)
         with old_image.open() as fd:
             new_image.save(fd)
         db.session.add(new_image)
         db.session.flush()
         logger.info(
             'Added image during event cloning: {}'.format(new_image))