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.

147 lines
4.8 KiB
JavaScript

/*
* Copyright (C) 2018 Intel Corporation
* SPDX-License-Identifier: MIT
*/
/* eslint prefer-arrow-callback: [ "error", { "allowNamedFunctions": true } ] */
/* global
require:false
*/
(() => {
const PluginRegistry = require('./plugins');
const serverProxy = require('./server-proxy');
const {
isBoolean,
isInteger,
isEnum,
isString,
checkFilter,
} = require('./common');
function implementAPI(cvat) {
cvat.plugins.list.implementation = PluginRegistry.list;
cvat.plugins.register.implementation = PluginRegistry.register;
cvat.server.about.implementation = async () => {
const result = await serverProxy.server.about();
return result;
};
cvat.server.share.implementation = async (directory) => {
const result = await serverProxy.server.share(directory);
return result;
};
cvat.server.login.implementation = async (username, password) => {
await serverProxy.server.login(username, password);
};
cvat.server.logout.implementation = async () => {
await serverProxy.server.logout();
};
cvat.users.get.implementation = async (filter) => {
checkFilter(filter, {
self: isBoolean,
});
let users = null;
if ('self' in filter && filter.self) {
users = await serverProxy.users.getSelf();
users = [users];
} else {
users = await serverProxy.users.getUsers();
}
users = users.map(user => new window.cvat.classes.User(user));
return users;
};
cvat.jobs.get.implementation = async (filter) => {
checkFilter(filter, {
taskID: isInteger,
jobID: isInteger,
});
if (('taskID' in filter) && ('jobID' in filter)) {
throw new window.cvat.exceptions.ArgumentError(
'Only one of fields "taskID" and "jobID" allowed simultaneously',
);
}
if (!Object.keys(filter).length) {
throw new window.cvat.exceptions.ArgumentError(
'Job filter must not be empty',
);
}
let tasks = null;
if ('taskID' in filter) {
tasks = await serverProxy.tasks.getTasks(`id=${filter.taskID}`);
} else {
const job = await serverProxy.jobs.getJob(filter.jobID);
if (typeof (job.task_id) !== 'undefined') {
tasks = await serverProxy.tasks.getTasks(`id=${job.task_id}`);
}
}
// If task was found by its id, then create task instance and get Job instance from it
if (tasks !== null && tasks.length) {
const task = new window.cvat.classes.Task(tasks[0]);
return filter.jobID ? task.jobs.filter(job => job.id === filter.jobID) : task.jobs;
}
return [];
};
cvat.tasks.get.implementation = async (filter) => {
checkFilter(filter, {
page: isInteger,
name: isString,
id: isInteger,
owner: isString,
assignee: isString,
search: isString,
status: isEnum.bind(window.cvat.enums.TaskStatus),
mode: isEnum.bind(window.cvat.enums.TaskMode),
});
if ('search' in filter && Object.keys(filter).length > 1) {
if (!('page' in filter && Object.keys(filter).length === 2)) {
throw new window.cvat.exceptions.ArgumentError(
'Do not use the filter field "search" with others',
);
}
}
if ('id' in filter && Object.keys(filter).length > 1) {
if (!('page' in filter && Object.keys(filter).length === 2)) {
throw new window.cvat.exceptions.ArgumentError(
'Do not use the filter field "id" with others',
);
}
}
const searchParams = new URLSearchParams();
for (const field of ['name', 'owner', 'assignee', 'search', 'status', 'mode', 'id', 'page']) {
if (Object.prototype.hasOwnProperty.call(filter, field)) {
searchParams.set(field, filter[field]);
}
}
const tasksData = await serverProxy.tasks.getTasks(searchParams.toString());
const tasks = tasksData.map(task => new window.cvat.classes.Task(task));
tasks.count = tasksData.count;
return tasks;
};
return cvat;
}
module.exports = implementAPI;
})();