fix: 修复换火山账号导致素材库操作失败问题
This commit is contained in:
@@ -32,6 +32,8 @@ _VIDEO_MAX = 50 * 1024 * 1024
|
||||
_AUDIO_MAX = 15 * 1024 * 1024
|
||||
DEFAULT_GROUP_NAME = "默认素材"
|
||||
DEFAULT_GROUP_MARKER = "__airshelf_free_asset_default__"
|
||||
OTHER_REMOTE_ASSET_MESSAGE = "该素材属于其他火山账号,请重新上传后再编辑"
|
||||
OTHER_REMOTE_GROUP_MESSAGE = "该素材组属于其他火山账号,请新建素材组后重新上传"
|
||||
|
||||
|
||||
def _serialize_asset(fa: FreeAsset) -> dict:
|
||||
@@ -63,10 +65,7 @@ def _assets_api_unavailable() -> Response:
|
||||
return Response({"detail": "素材库服务未配置,请联系管理员"}, status=status.HTTP_503_SERVICE_UNAVAILABLE)
|
||||
|
||||
|
||||
def _get_or_create_default_group(*, team, user) -> FreeAssetGroup:
|
||||
group = FreeAssetGroup.objects.filter(team=team, is_deleted=False, description=DEFAULT_GROUP_MARKER).first()
|
||||
if group is not None:
|
||||
return group
|
||||
def _create_default_group(*, team, user) -> FreeAssetGroup:
|
||||
remote_group_id = assets_client.create_asset_group(DEFAULT_GROUP_NAME, DEFAULT_GROUP_MARKER)
|
||||
return FreeAssetGroup.objects.create(
|
||||
team=team,
|
||||
@@ -77,6 +76,19 @@ def _get_or_create_default_group(*, team, user) -> FreeAssetGroup:
|
||||
)
|
||||
|
||||
|
||||
def _get_or_create_default_group(*, team, user) -> FreeAssetGroup:
|
||||
group = FreeAssetGroup.objects.filter(team=team, is_deleted=False, description=DEFAULT_GROUP_MARKER).first()
|
||||
if group is not None:
|
||||
try:
|
||||
assets_client.get_asset_group(group.remote_group_id)
|
||||
except AssetsAPIError as exc:
|
||||
if not assets_client.is_group_not_found_code(exc.code):
|
||||
raise
|
||||
return _create_default_group(team=team, user=user)
|
||||
return group
|
||||
return _create_default_group(team=team, user=user)
|
||||
|
||||
|
||||
def _upload_asset_to_group(request, *, team, group: FreeAssetGroup, image_only: bool = False) -> Response:
|
||||
upload = request.FILES.get("file")
|
||||
if upload is None:
|
||||
@@ -138,6 +150,8 @@ def _upload_asset_to_group(request, *, team, group: FreeAssetGroup, image_only:
|
||||
try:
|
||||
remote_asset_id = assets_client.create_asset(group.remote_group_id, url, name=name, asset_type=asset_type)
|
||||
except AssetsAPIError as exc:
|
||||
if assets_client.is_group_not_found_code(exc.code):
|
||||
return Response({"detail": OTHER_REMOTE_GROUP_MESSAGE}, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response({"detail": exc.user_message}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
fa = FreeAsset.objects.create(
|
||||
@@ -215,8 +229,9 @@ class FreeAssetGroupDetailView(APIView):
|
||||
try:
|
||||
assets_client.update_asset_group(group.remote_group_id, name=group.name, description=group.description)
|
||||
except AssetsAPIError as exc:
|
||||
if exc.code != "NotFound":
|
||||
return Response({"detail": exc.user_message}, status=status.HTTP_400_BAD_REQUEST)
|
||||
if assets_client.is_group_not_found_code(exc.code):
|
||||
return Response({"detail": OTHER_REMOTE_GROUP_MESSAGE}, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response({"detail": exc.user_message}, status=status.HTTP_400_BAD_REQUEST)
|
||||
group.save(update_fields=update_fields)
|
||||
return Response({"group": _serialize_group(group)})
|
||||
|
||||
@@ -228,7 +243,7 @@ class FreeAssetGroupDetailView(APIView):
|
||||
assets_client.delete_asset_group(group.remote_group_id)
|
||||
except AssetsAPIError as exc:
|
||||
# 远程已不存在 → 幂等继续清本地;其它错误如实反馈
|
||||
if exc.code != "NotFound":
|
||||
if not assets_client.is_group_not_found_code(exc.code):
|
||||
return Response({"detail": exc.user_message}, status=status.HTTP_400_BAD_REQUEST)
|
||||
group.is_deleted = True
|
||||
group.save(update_fields=["is_deleted", "updated_at"])
|
||||
@@ -286,8 +301,9 @@ class FreeAssetDetailView(APIView):
|
||||
try:
|
||||
assets_client.update_asset(fa.remote_asset_id, name=name)
|
||||
except AssetsAPIError as exc:
|
||||
if exc.code != "NotFound":
|
||||
return Response({"detail": exc.user_message}, status=status.HTTP_400_BAD_REQUEST)
|
||||
if assets_client.is_asset_not_found_code(exc.code):
|
||||
return Response({"detail": OTHER_REMOTE_ASSET_MESSAGE}, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response({"detail": exc.user_message}, status=status.HTTP_400_BAD_REQUEST)
|
||||
fa.name = name[:128]
|
||||
fa.save(update_fields=["name", "updated_at"])
|
||||
return Response({"asset": _serialize_asset(fa)})
|
||||
@@ -299,7 +315,7 @@ class FreeAssetDetailView(APIView):
|
||||
try:
|
||||
assets_client.delete_asset(fa.remote_asset_id)
|
||||
except AssetsAPIError as exc:
|
||||
if exc.code != "NotFound":
|
||||
if not assets_client.is_asset_not_found_code(exc.code):
|
||||
return Response({"detail": exc.user_message}, status=status.HTTP_400_BAD_REQUEST)
|
||||
fa.delete()
|
||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||
|
||||
Reference in New Issue
Block a user