feat: 录像增加 cast 格式 (#7259)

* feat: 录像增加 cast 格式

* perf: 优化一下写法

* perf: 修改一点点

Co-authored-by: ibuler <ibuler@qq.com>
This commit is contained in:
Eric_Lee
2021-12-08 15:35:22 +08:00
committed by GitHub
parent d72aa34513
commit 0afeed0ff1
5 changed files with 89 additions and 38 deletions

View File

@@ -1,30 +1,28 @@
# -*- coding: utf-8 -*-
#
import os
from itertools import groupby
from itertools import groupby, chain
from django.conf import settings
from django.core.files.storage import default_storage
from django.utils.translation import ugettext as _
import jms_storage
from common.tasks import send_mail_async
from common.utils import get_logger, reverse
from common.utils import get_logger
from . import const
from .models import ReplayStorage, Session, Command
from .models import ReplayStorage
logger = get_logger(__name__)
def find_session_replay_local(session):
# 新版本和老版本的文件后缀不同
session_path = session.get_rel_replay_path() # 存在外部存储上的路径
local_path = session.get_local_path()
local_path_v1 = session.get_local_path(version=1)
# 存在外部存储上,所有可能的路径名
session_paths = session.get_all_possible_relative_path()
# 去default storage中查找
for _local_path in (local_path, local_path_v1, session_path):
# 存在本地存储上,所有可能的路径名
local_paths = session.get_all_possible_local_path()
for _local_path in chain(session_paths, local_paths):
if default_storage.exists(_local_path):
url = default_storage.url(_local_path)
return _local_path, url
@@ -32,8 +30,6 @@ def find_session_replay_local(session):
def download_session_replay(session):
session_path = session.get_rel_replay_path() # 存在外部存储上的路径
local_path = session.get_local_path()
replay_storages = ReplayStorage.objects.all()
configs = {
storage.name: storage.config
@@ -45,13 +41,23 @@ def download_session_replay(session):
if not configs:
msg = "Not found replay file, and not remote storage set"
return None, msg
storage = jms_storage.get_multi_object_storage(configs)
# 获取外部存储路径名
session_path = session.find_ok_relative_path_in_storage(storage)
if not session_path:
msg = "Not found session replay file"
return None, msg
# 通过外部存储路径名后缀,构造真实的本地存储路径
local_path = session.get_local_path_by_relative_path(session_path)
# 保存到storage的路径
target_path = os.path.join(default_storage.base_location, local_path)
target_dir = os.path.dirname(target_path)
if not os.path.isdir(target_dir):
os.makedirs(target_dir, exist_ok=True)
storage = jms_storage.get_multi_object_storage(configs)
ok, err = storage.download(session_path, target_path)
if not ok:
msg = "Failed download replay file: {}".format(err)