def _2persistent(self, target, transient): # XXX move this method to file_manager # XXX Do this check or not? image = Image.open(transient.path) assert image.format in Image.SAVE and image.format != 'bmp',\ 'Unsupported image format' if self.prop.image_sizes: session = object_session(target) persistent_name = getattr(target, self.prop.attribute_name) if isinstance(persistent_name, six.binary_type): persistent_name = persistent_name.decode('utf-8') pn, ext = os.path.splitext(persistent_name) image_crop = self.prop.resize(image, self.prop.image_sizes) if self.prop.force_rgb and image_crop.mode not in ['RGB', 'RGBA']: image_crop = image_crop.convert('RGB') if ext == '.gif': image_crop.format = 'jpeg' ext = '.jpeg' if self.prop.enhancements: for enhance, factor in self.prop.enhancements: image_crop = enhance(image_crop).enhance(factor) if self.prop.filter: image_crop = image_crop.filter(self.prop.filter) if not ext: # set extension if it is not set ext = '.' + image.format.lower() if pn + ext != persistent_name: persistent_name = pn + ext # XXX hack? setattr(target, self.prop.attribute_name, persistent_name.encode('utf-8')) image_attr = getattr(target.__class__, self.prop.key) file_manager = persistent = session.find_file_manager(image_attr) persistent = file_manager.get_persistent(persistent_name, self.prop.persistent_cls) transient = session.find_file_manager(image_attr).new_transient( ext) kw = dict(quality=self.prop.quality) if self.prop.optimize: kw = dict(kw, optimize=True) image_crop.save(transient.path, **kw) session.find_file_manager(image_attr).store(transient, persistent) return persistent else: # Attention! This method can accept PersistentFile. # In this case one shold NEVER been deleted or rewritten. assert isinstance(transient, TransientFile), repr(transient) return FileEventHandlers._2persistent(self, target, transient)
def _2persistent(self, target, transient): # XXX move this method to file_manager # XXX Do this check or not? image = Image.open(transient.path) assert image.format in Image.SAVE and image.format != 'bmp',\ 'Unsupported image format' if self.prop.image_sizes: session = object_session(target) persistent_name = getattr(target, self.prop.attribute_name) if isinstance(persistent_name, six.binary_type): persistent_name = persistent_name.decode('utf-8') pn, ext = os.path.splitext(persistent_name) image_crop = self.prop.resize(image, self.prop.image_sizes) if self.prop.force_rgb and image_crop.mode not in ['RGB', 'RGBA']: image_crop = image_crop.convert('RGB') if ext == '.gif': image_crop.format = 'jpeg' ext = '.jpeg' if self.prop.enhancements: for enhance, factor in self.prop.enhancements: image_crop = enhance(image_crop).enhance(factor) if self.prop.filter: image_crop = image_crop.filter(self.prop.filter) if not ext: # set extension if it is not set ext = '.' + image.format.lower() if pn + ext != persistent_name: persistent_name = pn + ext # XXX hack? setattr(target, self.prop.attribute_name, persistent_name.encode('utf-8')) image_attr = getattr(target.__class__, self.prop.key) file_manager = persistent = session.find_file_manager(image_attr) persistent = file_manager.get_persistent(persistent_name, self.prop.persistent_cls) transient = session.find_file_manager(image_attr).new_transient(ext) kw = dict(quality=self.prop.quality) if self.prop.optimize: kw = dict(kw, optimize=True) image_crop.save(transient.path, **kw) session.find_file_manager(image_attr).store(transient, persistent) return persistent else: # Attention! This method can accept PersistentFile. # In this case one shold NEVER been deleted or rewritten. assert isinstance(transient, TransientFile), repr(transient) return FileEventHandlers._2persistent(self, target, transient)
def before_insert(self, mapper, connection, target): FileEventHandlers.before_insert(self, mapper, connection, target) self._fill_img(mapper, connection, target)