def create(self, validated_data):
        # Overriding the create method to handle file processing
        owner = self.context.get('request').user
        f = self.initial_data.get('icon_file')

        # ensure filetype is valid:
        upload_helpers.validate_file(f, self.ext_whitelist)

        self.validated_data.update(self.get_presave_create_dictionary())
        self.validated_data.update({
            'host': settings.SERVER_HOST,
            'file_name_orig': f.name,
            'name': self.validated_data.get('name') or f.name,
            'virtual_path': upload_helpers.generate_relative_path(
                owner, 'icons')

        })
        # create unsaved Icon instance
        self.instance = models.Icon(**self.validated_data)

        # Save it to Amazon S3 cloud
        self.instance.process_file(f, self.validated_data)

        # Commit to database
        self.instance.save()

        # Send binaries to Amazon:
        self.instance.send_icons_to_s3()
        return self.instance
 def process_file(self, file, owner):
     
     #save to disk:
     model_name_plural = models.Audio.model_name_plural
     file_name_new = upload_helpers.save_file_to_disk(owner, model_name_plural, file)
     file_name, ext = os.path.splitext(file_name_new)
     
     # convert to MP3:
     if ext != '.mp3':
         # use ffmpeg to convert to mp3:
         media_path = upload_helpers.generate_absolute_path(owner, model_name_plural)
         path_to_be_converted = media_path + '/' + file_name_new
         file_name_new = file_name + '.mp3'
         path_to_mp3 = media_path + '/' + file_name_new
         command = 'ffmpeg -loglevel panic -i \'%s\' -ab 32k -ar 22050 -y \'%s\'' % \
             (path_to_be_converted, path_to_mp3)
         result = os.popen(command)
     
     return {
         'file_name_orig': file.name,
         'name': self.initial_data.get('name') or file.name,
         'file_name_new': file_name_new,
         'content_type': ext.replace('.', ''),
         'virtual_path': upload_helpers.generate_relative_path(owner, model_name_plural)
     }
    def process_file(self, file, owner):
        from PIL import Image, ImageOps
        #save to disk:
        model_name_plural = models.Photo.model_name_plural
        file_name_new = upload_helpers.save_file_to_disk(owner, model_name_plural, file)
        file_name, ext = os.path.splitext(file_name_new)

        # create thumbnails:
        media_path = upload_helpers.generate_absolute_path(owner, model_name_plural)
        im = Image.open(media_path + '/' + file_name_new)
        exif = models.Photo.read_exif_data(im)
        sizes = [1000, 500, 250, 128, 50, 20]
        photo_paths = [file_name_new]
        for s in sizes:
            if s in [50, 25]:
                # ensure that perfect squares:
                im.thumbnail((s * 2, s * 2), Image.ANTIALIAS)
                im = im.crop([0, 0, s - 2, s - 2])
                # for some reason, ImageOps.expand throws an error for some files:
                im = ImageOps.expand(im, border=2, fill=(255, 255, 255, 255))
            else:
                im.thumbnail((s, s), Image.ANTIALIAS)
            abs_path = '%s/%s_%s%s' % (media_path, file_name, s, ext)
            im.save(abs_path)
            photo_paths.append('%s_%s%s' % (file_name, s, ext))
        
        return {
            'device': exif.get('model', None),
            'point': exif.get('point', None),
            'file_name_orig': file.name,
            'name': self.initial_data.get('name') or file.name,
            'file_name_new': file_name_new,
            'file_name_large': photo_paths[1],
            'file_name_medium': photo_paths[2],
            'file_name_medium_sm': photo_paths[3],
            'file_name_small': photo_paths[4],
            'file_name_marker_lg': photo_paths[5],
            'file_name_marker_sm': photo_paths[6],
            'content_type': ext.replace('.', ''),
            'virtual_path': upload_helpers.generate_relative_path(owner, model_name_plural)
        }
 def process_file(self, file, owner):
     #save to disk:
     model_name_plural = models.Scan.model_name_plural
     uuid = generic.generateID()
     file_name_new = upload_helpers.save_file_to_disk(owner, model_name_plural, file, uuid=uuid)
     file_name, ext = os.path.splitext(file_name_new)
     
     # create thumbnail:
     from PIL import Image
     thumbnail_name = '%s_thumb.png' % file_name
     media_path = upload_helpers.generate_absolute_path(owner, model_name_plural, uuid=uuid)
     im = Image.open(media_path + '/' + file_name_new)
     im.thumbnail([500, 500], Image.ANTIALIAS)
     im.save('%s/%s' % (media_path, thumbnail_name))
     
     return {
         'uuid': uuid,
         'file_name_orig': file.name,
         'name': self.initial_data.get('name') or file.name,
         'file_name_new': file_name_new,
         'file_name_thumb': thumbnail_name,
         'content_type': ext.replace('.', ''),
         'virtual_path': upload_helpers.generate_relative_path(owner, model_name_plural, uuid=uuid)
     }
Exemple #5
0
 def generate_relative_path(self):
     return upload_helpers.generate_relative_path(self.owner, self.model_name_plural)
Exemple #6
0
 def generate_relative_path(self):
     return upload_helpers.generate_relative_path(
         self.owner, self.model_name_plural
     )
Exemple #7
0
 def test_generate_relative_path(self):
     rel_path = upload_helpers.generate_relative_path(
         self.model.owner, self.model.model_name_plural
     )
     self.assertEqual(rel_path, self.model.generate_relative_path())