ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: очистка хранилища и проектные квоты
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
from django.conf import settings
|
||||
from django.db.models import Sum
|
||||
from rest_framework import status
|
||||
from rest_framework.response import Response
|
||||
|
||||
|
||||
def get_workspace_file_size_limit(workspace):
|
||||
@@ -22,3 +25,71 @@ def resolve_workspace_upload_size_limit(workspace, requested_size):
|
||||
return requested_size
|
||||
|
||||
return min(requested_size, workspace_limit)
|
||||
|
||||
|
||||
def get_project_storage_quota(project):
|
||||
if not getattr(project, "storage_quota_enabled", False):
|
||||
return None
|
||||
|
||||
quota = getattr(project, "storage_quota", 0) or 0
|
||||
return max(int(quota), 0) or None
|
||||
|
||||
|
||||
def get_project_storage_usage(project):
|
||||
from plane.db.models import FileAsset
|
||||
|
||||
total = (
|
||||
FileAsset.objects.filter(
|
||||
workspace_id=project.workspace_id,
|
||||
project_id=project.id,
|
||||
is_uploaded=True,
|
||||
)
|
||||
.aggregate(total=Sum("size"))
|
||||
.get("total")
|
||||
)
|
||||
return int(total or 0)
|
||||
|
||||
|
||||
def get_project_storage_quota_state(project, requested_size=0):
|
||||
quota = get_project_storage_quota(project)
|
||||
used = get_project_storage_usage(project)
|
||||
requested = max(int(requested_size or 0), 0)
|
||||
|
||||
if quota is None:
|
||||
return {
|
||||
"enabled": False,
|
||||
"quota": 0,
|
||||
"used": used,
|
||||
"remaining": None,
|
||||
"allowed": True,
|
||||
"exceeded": False,
|
||||
}
|
||||
|
||||
remaining = max(quota - used, 0)
|
||||
return {
|
||||
"enabled": True,
|
||||
"quota": quota,
|
||||
"used": used,
|
||||
"remaining": remaining,
|
||||
"allowed": used + requested <= quota,
|
||||
"exceeded": used > quota,
|
||||
}
|
||||
|
||||
|
||||
def get_project_storage_quota_response(project, requested_size=0):
|
||||
quota_state = get_project_storage_quota_state(project, requested_size=requested_size)
|
||||
if quota_state["allowed"]:
|
||||
return None
|
||||
|
||||
return Response(
|
||||
{
|
||||
"error": "Project storage quota exceeded.",
|
||||
"status": False,
|
||||
"code": "project_storage_quota_exceeded",
|
||||
"project_id": str(project.id),
|
||||
"quota": quota_state["quota"],
|
||||
"used": quota_state["used"],
|
||||
"remaining": quota_state["remaining"],
|
||||
},
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user