38 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from pathlib import Path
 | 
						|
from typing import BinaryIO
 | 
						|
from uuid import uuid4
 | 
						|
 | 
						|
from aioshutil import copyfileobj
 | 
						|
 | 
						|
from barcodes.images_uploader.base import BaseImagesUploader
 | 
						|
from constants import APP_PATH, API_ROOT
 | 
						|
 | 
						|
 | 
						|
class BarcodeImagesUploader(BaseImagesUploader):
 | 
						|
    def __init__(self):
 | 
						|
        self.relative_path = Path("static/images/product_barcodes")
 | 
						|
        self.storage_path = APP_PATH / self.relative_path
 | 
						|
        if not Path.exists(self.storage_path):
 | 
						|
            Path.mkdir(self.storage_path)
 | 
						|
 | 
						|
    def get_url(self, filename: str) -> str:
 | 
						|
        file_location = self.relative_path / filename
 | 
						|
        return f"{API_ROOT}/{file_location}"
 | 
						|
 | 
						|
    def get_abs_path(self, filename: str) -> str:
 | 
						|
        file_location = self.storage_path / filename
 | 
						|
        return file_location
 | 
						|
 | 
						|
    def delete(self, filename: str):
 | 
						|
        file_location = self.storage_path / filename
 | 
						|
        if file_location.exists():
 | 
						|
            file_location.unlink()
 | 
						|
 | 
						|
    async def upload(self, file: BinaryIO, filename: str) -> str:
 | 
						|
        filename = str(uuid4()) + '.' + filename.split('.')[-1]
 | 
						|
        file_location = self.storage_path / filename
 | 
						|
        with open(file_location, 'wb') as buffer:
 | 
						|
            await copyfileobj(file, buffer)
 | 
						|
 | 
						|
        return filename
 |