class VirtualFieldFile(FieldFile): def __init__(self, name, storage=None, upload_to=None): super(FieldFile, self).__init__(None, name) self.instance = None self.field = FileField(name='file', upload_to=upload_to, storage=storage) self.storage = self.field.storage self._committed = True def get_directory_name(self): return self.field.get_directory_name() def get_filename(self, filename): return self.field.get_filename(filename) def generate_filename(self, filename): return self.field.generate_filename(None, filename) def save(self, *args, **kwargs): raise NotImplementedError def delete(self, *args, **kwargs): raise NotImplementedError @cached_property def dimensions(self): try: close = self.closed self.open() return get_image_dimensions(self, close=close) except: return (0, 0) @cached_property def width(self): w, h = self.dimensions return w @cached_property def height(self): w, h = self.dimensions return h
class VirtualFieldFile(FieldFile): def __init__(self, name, storage=None, upload_to=None): super(FieldFile, self).__init__(None, name) self.instance = None self.field = FileField(name='file', upload_to=upload_to, storage=storage) self.storage = self.field.storage self._committed = True def get_directory_name(self): return self.field.get_directory_name() def get_filename(self, filename): return self.field.get_filename(filename) def generate_filename(self, filename): return self.field.generate_filename(None, filename) def save(self, *args, **kwargs): raise NotImplementedError def delete(self, *args, **kwargs): raise NotImplementedError @cached_property def dimensions(self): try: pil_image = PIL.Image.open(self.path) except: return (0, 0) else: return pil_image.size @cached_property def width(self): w, h = self.dimensions return w @cached_property def height(self): w, h = self.dimensions return h