47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
# Copy from https://github.com/silentsokolov/flask-thumbnails/blob/master/flask_thumbnails/storage_backends.py
 | 
						|
import errno
 | 
						|
import os
 | 
						|
from abc import ABC, abstractmethod
 | 
						|
 | 
						|
 | 
						|
class BaseStorageBackend(ABC):
 | 
						|
    def __init__(self, app=None):
 | 
						|
        self.app = app
 | 
						|
 | 
						|
    @abstractmethod
 | 
						|
    def read(self, filepath, mode="rb", **kwargs):
 | 
						|
        raise NotImplementedError
 | 
						|
 | 
						|
    @abstractmethod
 | 
						|
    def exists(self, filepath):
 | 
						|
        raise NotImplementedError
 | 
						|
 | 
						|
    @abstractmethod
 | 
						|
    def save(self, filepath, data):
 | 
						|
        raise NotImplementedError
 | 
						|
 | 
						|
 | 
						|
class FilesystemStorageBackend(BaseStorageBackend):
 | 
						|
    def read(self, filepath, mode="rb", **kwargs):
 | 
						|
        with open(filepath, mode) as f:  # pylint: disable=unspecified-encoding
 | 
						|
            return f.read()
 | 
						|
 | 
						|
    def exists(self, filepath):
 | 
						|
        return os.path.exists(filepath)
 | 
						|
 | 
						|
    def save(self, filepath, data):
 | 
						|
        directory = os.path.dirname(filepath)
 | 
						|
 | 
						|
        if not os.path.exists(directory):
 | 
						|
            try:
 | 
						|
                os.makedirs(directory)
 | 
						|
            except OSError as e:
 | 
						|
                if e.errno != errno.EEXIST:
 | 
						|
                    raise
 | 
						|
 | 
						|
        if not os.path.isdir(directory):
 | 
						|
            raise IOError("{} is not a directory".format(directory))
 | 
						|
 | 
						|
        with open(filepath, "wb") as f:
 | 
						|
            f.write(data)
 |