Files get deleted, if quiz gets deleted

This commit is contained in:
Mawoka
2022-04-02 20:51:17 +02:00
parent 0bad308c9c
commit e649b5ac46
7 changed files with 44 additions and 21 deletions
+7 -1
View File
@@ -8,7 +8,7 @@ class Storage:
self.backend = backend
self.deta_key = deta_key
self.deta_id = deta_id
self.deta_base_url = f"https://drive.deta.sh/v1/{deta_id}/classquiz"
self.deta_base_url = f"https://drive.deta.sh/v1/{deta_id}/classquiz1"
self.deta_instance = DetaStorage(deta_base_url=self.deta_base_url, deta_key=self.deta_key, deta_id=self.deta_id)
self.local_instance = LocalStorage(base_path=storage_path)
if backend == "deta":
@@ -32,3 +32,9 @@ class Storage:
return await self.deta_instance.upload(file=file_data, file_name=file_name)
elif self.backend == "local":
return await self.local_instance.write_file(file_name=file_name, data=file_data)
async def delete(self, file_names: [str]) -> None:
if self.backend == "deta":
return await self.deta_instance.delete(file_names=file_names)
elif self.backend == "local":
return await self.local_instance.delete_file(file_names=file_names)
+3 -6
View File
@@ -1,9 +1,6 @@
from classquiz.config import settings
from aiohttp import ClientSession
from io import BytesIO
settings = settings()
class DetaStorage:
def __init__(self, deta_base_url: str, deta_id: str, deta_key: str):
@@ -42,10 +39,10 @@ class DetaStorage:
else:
raise Exception("Upload failed")
async def delete(self, file_name: [str]) -> None:
async def delete(self, file_names: [str]) -> None:
async with ClientSession(headers=self.headers) as session:
async with session.delete(f"{self.deta_url}/files/delete", data={"names": file_name}) as response:
async with session.delete(f"{self.deta_url}/files", json={"names": file_names}) as response:
if response.status == 200:
return None
else:
raise Exception("Delete failed")
raise Exception("Delete failed")
+14 -3
View File
@@ -1,17 +1,28 @@
import io
import os
import aiofiles
import aiofiles.os
class LocalStorage:
def __init__(self, base_path: str):
self.base_path = base_path
async def get_file(self, file_name: str) -> io.BytesIO:
async with aiofiles.open(file=os.path.join(self.base_path, file_name), mode='rb') as f:
return io.BytesIO(await f.read())
async def get_file(self, file_name: str) -> io.BytesIO | None:
try:
async with aiofiles.open(file=os.path.join(self.base_path, file_name), mode='rb') as f:
return io.BytesIO(await f.read())
except FileNotFoundError:
return None
async def write_file(self, file_name: str, data: bytes) -> None:
async with aiofiles.open(file=os.path.join(self.base_path, file_name), mode='wb') as f:
await f.write(data)
async def delete_file(self, file_names: [str]) -> None:
for i in file_names:
try:
await aiofiles.os.remove(os.path.join(self.base_path, i))
except FileNotFoundError:
pass
return None