🐛 Fixed storage
This commit is contained in:
@@ -57,7 +57,6 @@ async def download_file(file_name: str):
|
|||||||
raise HTTPException(status_code=404, detail="File not found")
|
raise HTTPException(status_code=404, detail="File not found")
|
||||||
if download is None:
|
if download is None:
|
||||||
raise HTTPException(status_code=404, detail="File not found")
|
raise HTTPException(status_code=404, detail="File not found")
|
||||||
|
|
||||||
media_type = "image/*"
|
media_type = "image/*"
|
||||||
if item is not None:
|
if item is not None:
|
||||||
media_type = item.mime_type
|
media_type = item.mime_type
|
||||||
|
|||||||
@@ -42,13 +42,8 @@ class Storage:
|
|||||||
else:
|
else:
|
||||||
raise NotImplementedError(f"Backend {backend} not implemented")
|
raise NotImplementedError(f"Backend {backend} not implemented")
|
||||||
|
|
||||||
async def download(self, file_name: str) -> Generator | None:
|
def download(self, file_name: str) -> Generator | None:
|
||||||
"""
|
return self.instance.download(file_name)
|
||||||
No support for s3 since it doesn't make sense relaying the traffic through this backend
|
|
||||||
:param file_name:
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
yield self.instance.download(file_name)
|
|
||||||
|
|
||||||
async def upload(self, file_name: str, file_data: BinaryIO, mime_type: str | None = None) -> None:
|
async def upload(self, file_name: str, file_data: BinaryIO, mime_type: str | None = None) -> None:
|
||||||
return await self.instance.upload(file=file_data, file_name=file_name, mime_type=mime_type)
|
return await self.instance.upload(file=file_data, file_name=file_name, mime_type=mime_type)
|
||||||
|
|||||||
@@ -24,7 +24,11 @@ class LocalStorage:
|
|||||||
async def download(self, file_name: str) -> Generator | None:
|
async def download(self, file_name: str) -> Generator | None:
|
||||||
try:
|
try:
|
||||||
async with aiofiles.open(file=os.path.join(self.base_path, file_name), mode="rb") as f:
|
async with aiofiles.open(file=os.path.join(self.base_path, file_name), mode="rb") as f:
|
||||||
yield f.read()
|
while True:
|
||||||
|
chunk = await f.read(8192)
|
||||||
|
if not chunk:
|
||||||
|
break
|
||||||
|
yield chunk
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
yield None
|
yield None
|
||||||
|
|
||||||
@@ -43,6 +47,6 @@ class LocalStorage:
|
|||||||
|
|
||||||
def size(self, file_name: str) -> int | None:
|
def size(self, file_name: str) -> int | None:
|
||||||
try:
|
try:
|
||||||
return os.stat(os.path.join(self.base_path, file_name))
|
return os.stat(os.path.join(self.base_path, file_name)).st_size
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -48,8 +48,7 @@ async def calculate_hash(ctx, file_id_as_str: str):
|
|||||||
print("Retry raised!")
|
print("Retry raised!")
|
||||||
raise Retry(defer=ctx["job_try"] * 10)
|
raise Retry(defer=ctx["job_try"] * 10)
|
||||||
async for chunk in file_bytes:
|
async for chunk in file_bytes:
|
||||||
async for c in chunk:
|
file.write(chunk)
|
||||||
file.write(c)
|
|
||||||
try:
|
try:
|
||||||
if 0 < file_data.size < 20_970_000: # greater than 0 but smaller than 20mbytes
|
if 0 < file_data.size < 20_970_000: # greater than 0 but smaller than 20mbytes
|
||||||
file_data.thumbhash = image_to_thumbhash(file)
|
file_data.thumbhash = image_to_thumbhash(file)
|
||||||
@@ -63,7 +62,6 @@ async def calculate_hash(ctx, file_id_as_str: str):
|
|||||||
while chunk := file.read(6400):
|
while chunk := file.read(6400):
|
||||||
hash_obj.update(chunk)
|
hash_obj.update(chunk)
|
||||||
file_data.hash = hash_obj.digest()
|
file_data.hash = hash_obj.digest()
|
||||||
print("Got hash!")
|
|
||||||
await file_data.update()
|
await file_data.update()
|
||||||
file.close()
|
file.close()
|
||||||
user: User | None = await User.objects.get_or_none(id=file_data.user.id)
|
user: User | None = await User.objects.get_or_none(id=file_data.user.id)
|
||||||
|
|||||||
@@ -9,7 +9,12 @@ import type { PrivateImageData } from '$lib/quiz_types';
|
|||||||
export const load = (async ({ fetch }) => {
|
export const load = (async ({ fetch }) => {
|
||||||
const res = await fetch('/api/v1/storage/list');
|
const res = await fetch('/api/v1/storage/list');
|
||||||
const res2 = await fetch('/api/v1/storage/limit');
|
const res2 = await fetch('/api/v1/storage/limit');
|
||||||
const json: PrivateImageData[] = await res.json();
|
let json: PrivateImageData[];
|
||||||
|
if (res.ok) {
|
||||||
|
json = await res.json();
|
||||||
|
} else {
|
||||||
|
json = [];
|
||||||
|
}
|
||||||
const storage_usage: { limit: number; limit_reached: boolean; used: number } =
|
const storage_usage: { limit: number; limit_reached: boolean; used: number } =
|
||||||
await res2.json();
|
await res2.json();
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user