|
|
|
@ -10,7 +10,7 @@ from django.conf import settings
|
|
|
|
from django.contrib.auth.decorators import permission_required
|
|
|
|
from django.contrib.auth.decorators import permission_required
|
|
|
|
from cvat.apps.authentication.decorators import login_required
|
|
|
|
from cvat.apps.authentication.decorators import login_required
|
|
|
|
|
|
|
|
|
|
|
|
from cvat.apps.engine.models import Task as TaskModel
|
|
|
|
from cvat.apps.engine.models import Task as TaskModel, Job as JobModel
|
|
|
|
from cvat.settings.base import JS_3RDPARTY
|
|
|
|
from cvat.settings.base import JS_3RDPARTY
|
|
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
import os
|
|
|
|
@ -56,63 +56,25 @@ def JsTreeView(request):
|
|
|
|
json_dumps_params=dict(ensure_ascii=False))
|
|
|
|
json_dumps_params=dict(ensure_ascii=False))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def MainTaskInfo(task, dst_dict):
|
|
|
|
|
|
|
|
dst_dict["status"] = task.status
|
|
|
|
|
|
|
|
dst_dict["num_of_segments"] = task.segment_set.count()
|
|
|
|
|
|
|
|
dst_dict["mode"] = task.mode.capitalize()
|
|
|
|
|
|
|
|
dst_dict["name"] = task.name
|
|
|
|
|
|
|
|
dst_dict["task_id"] = task.id
|
|
|
|
|
|
|
|
dst_dict["created_date"] = task.created_date
|
|
|
|
|
|
|
|
dst_dict["updated_date"] = task.updated_date
|
|
|
|
|
|
|
|
dst_dict["bug_tracker_link"] = task.bug_tracker
|
|
|
|
|
|
|
|
dst_dict["has_bug_tracker"] = len(task.bug_tracker) > 0
|
|
|
|
|
|
|
|
dst_dict["owner"] = 'undefined'
|
|
|
|
|
|
|
|
dst_dict["id"] = task.id
|
|
|
|
|
|
|
|
dst_dict["segments"] = []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def DetailTaskInfo(request, task, dst_dict):
|
|
|
|
|
|
|
|
scheme = request.scheme
|
|
|
|
|
|
|
|
host = request.get_host()
|
|
|
|
|
|
|
|
dst_dict['segments'] = []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for segment in task.segment_set.all():
|
|
|
|
|
|
|
|
for job in segment.job_set.all():
|
|
|
|
|
|
|
|
segment_url = "{0}://{1}/?id={2}".format(scheme, host, job.id)
|
|
|
|
|
|
|
|
dst_dict["segments"].append({
|
|
|
|
|
|
|
|
'id': job.id,
|
|
|
|
|
|
|
|
'start': segment.start_frame,
|
|
|
|
|
|
|
|
'stop': segment.stop_frame,
|
|
|
|
|
|
|
|
'url': segment_url
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
db_labels = task.label_set.prefetch_related('attributespec_set').all()
|
|
|
|
|
|
|
|
attributes = {}
|
|
|
|
|
|
|
|
for db_label in db_labels:
|
|
|
|
|
|
|
|
attributes[db_label.id] = {}
|
|
|
|
|
|
|
|
for db_attrspec in db_label.attributespec_set.all():
|
|
|
|
|
|
|
|
attributes[db_label.id][db_attrspec.id] = db_attrspec.text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dst_dict['labels'] = attributes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
|
|
|
@login_required
|
|
|
|
@permission_required('engine.view_task', raise_exception=True)
|
|
|
|
@permission_required('engine.view_task', raise_exception=True)
|
|
|
|
def DashboardView(request):
|
|
|
|
def DashboardView(request):
|
|
|
|
filter_name = request.GET['search'] if 'search' in request.GET else None
|
|
|
|
query_name = request.GET['search'] if 'search' in request.GET else None
|
|
|
|
tasks_query_set = list(TaskModel.objects.prefetch_related('segment_set').order_by('-created_date').all())
|
|
|
|
query_job = int(request.GET['jid']) if 'jid' in request.GET and request.GET['jid'].isdigit() else None
|
|
|
|
if filter_name is not None:
|
|
|
|
task_list = None
|
|
|
|
tasks_query_set = list(filter(lambda x: filter_name.lower() in x.name.lower(), tasks_query_set))
|
|
|
|
|
|
|
|
|
|
|
|
if query_job is not None and JobModel.objects.filter(pk = query_job).exists():
|
|
|
|
data = []
|
|
|
|
task_list = [JobModel.objects.select_related('segment__task').get(pk = query_job).segment.task]
|
|
|
|
for task in tasks_query_set:
|
|
|
|
else:
|
|
|
|
task_info = {}
|
|
|
|
task_list = list(TaskModel.objects.prefetch_related('segment_set__job_set').order_by('-created_date').all())
|
|
|
|
MainTaskInfo(task, task_info)
|
|
|
|
if query_name is not None:
|
|
|
|
DetailTaskInfo(request, task, task_info)
|
|
|
|
task_list = list(filter(lambda x: query_name.lower() in x.name.lower(), task_list))
|
|
|
|
data.append(task_info)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return render(request, 'dashboard/dashboard.html', {
|
|
|
|
return render(request, 'dashboard/dashboard.html', {
|
|
|
|
'data': data,
|
|
|
|
'data': task_list,
|
|
|
|
'max_upload_size': settings.LOCAL_LOAD_MAX_FILES_SIZE,
|
|
|
|
'max_upload_size': settings.LOCAL_LOAD_MAX_FILES_SIZE,
|
|
|
|
'max_upload_count': settings.LOCAL_LOAD_MAX_FILES_COUNT,
|
|
|
|
'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'),
|
|
|
|
'share_path': os.getenv('CVAT_SHARE_URL', default=r'${cvat_root}/share'),
|
|
|
|
'js_3rdparty': JS_3RDPARTY.get('dashboard', [])
|
|
|
|
'js_3rdparty': JS_3RDPARTY.get('dashboard', []),
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|