You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
|
|
# Copyright (C) 2018 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
from django.http import HttpResponse, JsonResponse, HttpResponseBadRequest
|
|
from django.shortcuts import redirect
|
|
from django.shortcuts import render
|
|
from django.conf import settings
|
|
from cvat.apps.authentication.decorators import login_required
|
|
|
|
from cvat.apps.engine.models import Task as TaskModel, Job as JobModel
|
|
from cvat.settings.base import JS_3RDPARTY
|
|
|
|
import os
|
|
|
|
def ScanNode(directory):
|
|
if '..' in directory.split(os.path.sep):
|
|
return HttpResponseBadRequest('Permission Denied')
|
|
|
|
act_dir = os.path.normpath(settings.SHARE_ROOT + directory)
|
|
result = []
|
|
|
|
nodes = os.listdir(act_dir)
|
|
files = filter(os.path.isfile, map(lambda f: os.path.join(act_dir, f), nodes))
|
|
dirs = filter(os.path.isdir, map(lambda d: os.path.join(act_dir, d), nodes))
|
|
|
|
for d in dirs:
|
|
name = os.path.basename(d)
|
|
children = len(os.listdir(d)) > 0
|
|
node = {'id': directory + name + '/', 'text': name, 'children': children}
|
|
result.append(node)
|
|
|
|
for f in files:
|
|
name = os.path.basename(f)
|
|
node = {'id': directory + name, 'text': name, "icon" : "jstree-file"}
|
|
result.append(node)
|
|
|
|
return result
|
|
|
|
@login_required
|
|
def JsTreeView(request):
|
|
node_id = None
|
|
if 'id' in request.GET:
|
|
node_id = request.GET['id']
|
|
|
|
if node_id is None or node_id == '#':
|
|
node_id = '/'
|
|
response = [{"id": node_id, "text": node_id, "children": ScanNode(node_id)}]
|
|
else:
|
|
response = ScanNode(node_id)
|
|
|
|
return JsonResponse(response, safe=False,
|
|
json_dumps_params=dict(ensure_ascii=False))
|
|
|
|
|
|
@login_required
|
|
def DashboardView(request):
|
|
query_name = request.GET['search'] if 'search' in request.GET else None
|
|
query_job = int(request.GET['jid']) if 'jid' in request.GET and request.GET['jid'].isdigit() else None
|
|
task_list = None
|
|
|
|
if query_job is not None and JobModel.objects.filter(pk = query_job).exists():
|
|
task_list = [JobModel.objects.select_related('segment__task').get(pk = query_job).segment.task]
|
|
else:
|
|
task_list = list(TaskModel.objects.prefetch_related('segment_set__job_set').order_by('-created_date').all())
|
|
if query_name is not None:
|
|
task_list = list(filter(lambda x: query_name.lower() in x.name.lower(), task_list))
|
|
|
|
task_list = list(filter(lambda task: request.user.has_perm(
|
|
'engine.task.access', task), task_list))
|
|
|
|
return render(request, 'dashboard/dashboard.html', {
|
|
'data': task_list,
|
|
'max_upload_size': settings.LOCAL_LOAD_MAX_FILES_SIZE,
|
|
'max_upload_count': settings.LOCAL_LOAD_MAX_FILES_COUNT,
|
|
'base_url': "{0}://{1}/".format(request.scheme, request.get_host()),
|
|
'share_path': os.getenv('CVAT_SHARE_URL', default=r'${cvat_root}/share'),
|
|
'js_3rdparty': JS_3RDPARTY.get('dashboard', []),
|
|
})
|