ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: очистка хранилища и проектные квоты
This commit is contained in:
@@ -23,7 +23,7 @@ from plane.settings.storage import S3Storage
|
||||
from plane.app.permissions import allow_permission, ROLE
|
||||
from plane.utils.cache import invalidate_cache_directly
|
||||
from plane.throttles.asset import AssetRateThrottle
|
||||
from plane.utils.upload_limits import resolve_workspace_upload_size_limit
|
||||
from plane.utils.upload_limits import get_project_storage_quota_response, resolve_workspace_upload_size_limit
|
||||
from plane.utils.file_dedup import (
|
||||
UploadedObjectMissing,
|
||||
attach_existing_blob_to_file_asset,
|
||||
@@ -361,6 +361,14 @@ class WorkspaceFileAssetEndpoint(BaseAPIView):
|
||||
|
||||
# Get the size limit
|
||||
size_limit = resolve_workspace_upload_size_limit(workspace, size)
|
||||
if entity_type == FileAsset.EntityTypeContext.PROJECT_COVER and entity_identifier:
|
||||
quota_project = Project.objects.filter(id=entity_identifier, workspace=workspace).first()
|
||||
else:
|
||||
quota_project = None
|
||||
if quota_project is not None:
|
||||
quota_response = get_project_storage_quota_response(quota_project, requested_size=size)
|
||||
if quota_response is not None:
|
||||
return quota_response
|
||||
|
||||
# asset key
|
||||
asset_key = f"{workspace.id}/{uuid.uuid4().hex}-{name}"
|
||||
@@ -564,6 +572,10 @@ class ProjectAssetEndpoint(BaseAPIView):
|
||||
|
||||
# Get the size limit
|
||||
size_limit = resolve_workspace_upload_size_limit(workspace, size)
|
||||
project = Project.objects.get(id=project_id, workspace=workspace)
|
||||
quota_response = get_project_storage_quota_response(project, requested_size=size)
|
||||
if quota_response is not None:
|
||||
return quota_response
|
||||
|
||||
# asset key
|
||||
asset_key = f"{workspace.id}/{uuid.uuid4().hex}-{name}"
|
||||
@@ -576,7 +588,7 @@ class ProjectAssetEndpoint(BaseAPIView):
|
||||
workspace=workspace,
|
||||
created_by=request.user,
|
||||
entity_type=entity_type,
|
||||
project_id=project_id,
|
||||
project_id=project.id,
|
||||
**self.get_entity_id_field(entity_type, entity_identifier),
|
||||
)
|
||||
|
||||
@@ -767,10 +779,6 @@ class DuplicateAssetEndpoint(BaseAPIView):
|
||||
)
|
||||
|
||||
workspace = Workspace.objects.get(slug=slug)
|
||||
if project_id:
|
||||
# check if project exists in the workspace
|
||||
if not Project.objects.filter(id=project_id, workspace=workspace).exists():
|
||||
return Response({"error": "Project not found"}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
storage = S3Storage(request=request)
|
||||
original_asset = FileAsset.objects.filter(id=asset_id, workspace=workspace, is_uploaded=True).first()
|
||||
@@ -778,6 +786,14 @@ class DuplicateAssetEndpoint(BaseAPIView):
|
||||
if not original_asset:
|
||||
return Response({"error": "Asset not found"}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
if project_id:
|
||||
project = Project.objects.filter(id=project_id, workspace=workspace).first()
|
||||
if not project:
|
||||
return Response({"error": "Project not found"}, status=status.HTTP_404_NOT_FOUND)
|
||||
quota_response = get_project_storage_quota_response(project, requested_size=original_asset.size)
|
||||
if quota_response is not None:
|
||||
return quota_response
|
||||
|
||||
destination_key = f"{workspace.id}/{uuid.uuid4().hex}-{original_asset.attributes.get('name')}"
|
||||
duplicated_asset = FileAsset.objects.create(
|
||||
attributes={
|
||||
|
||||
Reference in New Issue
Block a user