Merge pull request #2445 from openvinotoolkit/dk/cvat-core-pacth-requests-fix

Partly update fields with PATCH requests
main
Boris Sekachev 5 years ago committed by GitHub
commit b7da49d797
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- - PATCH requests from cvat-core submit only changed fields (<https://github.com/openvinotoolkit/cvat/pull/2445>)
### Deprecated ### Deprecated

@ -1,6 +1,6 @@
{ {
"name": "cvat-core", "name": "cvat-core",
"version": "3.9.0", "version": "3.9.1",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

@ -1,6 +1,6 @@
{ {
"name": "cvat-core", "name": "cvat-core",
"version": "3.9.0", "version": "3.9.1",
"description": "Part of Computer Vision Tool which presents an interface for client-side integration", "description": "Part of Computer Vision Tool which presents an interface for client-side integration",
"main": "babel.config.js", "main": "babel.config.js",
"scripts": { "scripts": {

@ -674,6 +674,11 @@
task: undefined, task: undefined,
}; };
let updatedFields = {
assignee: false,
status: false,
};
for (const property in data) { for (const property in data) {
if (Object.prototype.hasOwnProperty.call(data, property)) { if (Object.prototype.hasOwnProperty.call(data, property)) {
if (property in initialData) { if (property in initialData) {
@ -715,6 +720,7 @@
if (assignee !== null && !(assignee instanceof User)) { if (assignee !== null && !(assignee instanceof User)) {
throw new ArgumentError('Value must be a user instance'); throw new ArgumentError('Value must be a user instance');
} }
updatedFields.assignee = true;
data.assignee = assignee; data.assignee = assignee;
}, },
}, },
@ -743,6 +749,7 @@
); );
} }
updatedFields.status = true;
data.status = status; data.status = status;
}, },
}, },
@ -776,6 +783,12 @@
task: { task: {
get: () => data.task, get: () => data.task,
}, },
__updatedFields: {
get: () => updatedFields,
set: (fields) => {
updatedFields = fields;
},
},
}), }),
); );
@ -879,6 +892,13 @@
use_cache: undefined, use_cache: undefined,
}; };
let updatedFields = {
name: false,
assignee: false,
bug_tracker: false,
labels: false,
};
for (const property in data) { for (const property in data) {
if (Object.prototype.hasOwnProperty.call(data, property) && property in initialData) { if (Object.prototype.hasOwnProperty.call(data, property) && property in initialData) {
data[property] = initialData[property]; data[property] = initialData[property];
@ -948,6 +968,7 @@
if (!value.trim().length) { if (!value.trim().length) {
throw new ArgumentError('Value must not be empty'); throw new ArgumentError('Value must not be empty');
} }
updatedFields.name = true;
data.name = value; data.name = value;
}, },
}, },
@ -1006,6 +1027,7 @@
if (assignee !== null && !(assignee instanceof User)) { if (assignee !== null && !(assignee instanceof User)) {
throw new ArgumentError('Value must be a user instance'); throw new ArgumentError('Value must be a user instance');
} }
updatedFields.assignee = true;
data.assignee = assignee; data.assignee = assignee;
}, },
}, },
@ -1039,6 +1061,7 @@
bugTracker: { bugTracker: {
get: () => data.bug_tracker, get: () => data.bug_tracker,
set: (tracker) => { set: (tracker) => {
updatedFields.bug_tracker = true;
data.bug_tracker = tracker; data.bug_tracker = tracker;
}, },
}, },
@ -1145,6 +1168,7 @@
} }
} }
updatedFields.labels = true;
data.labels = [...labels]; data.labels = [...labels];
}, },
}, },
@ -1311,6 +1335,12 @@
dataChunkType: { dataChunkType: {
get: () => data.data_compressed_chunk_type, get: () => data.data_compressed_chunk_type,
}, },
__updatedFields: {
get: () => updatedFields,
set: (fields) => {
updatedFields = fields;
},
},
}), }),
); );
@ -1443,12 +1473,30 @@
Job.prototype.save.implementation = async function () { Job.prototype.save.implementation = async function () {
// TODO: Add ability to change an assignee // TODO: Add ability to change an assignee
if (this.id) { if (this.id) {
const jobData = { const jobData = {};
status: this.status,
assignee_id: this.assignee ? this.assignee.id : null, for (const [field, isUpdated] of Object.entries(this.__updatedFields)) {
}; if (isUpdated) {
switch (field) {
case 'status':
jobData.status = this.status;
break;
case 'assignee':
jobData.assignee_id = this.assignee ? this.assignee.id : null;
break;
default:
break;
}
}
}
await serverProxy.jobs.saveJob(this.id, jobData); await serverProxy.jobs.saveJob(this.id, jobData);
this.__updatedFields = {
status: false,
assignee: false,
};
return this; return this;
} }
@ -1653,14 +1701,38 @@
// TODO: Add ability to change an owner and an assignee // TODO: Add ability to change an owner and an assignee
if (typeof this.id !== 'undefined') { if (typeof this.id !== 'undefined') {
// If the task has been already created, we update it // If the task has been already created, we update it
const taskData = { const taskData = {};
assignee_id: this.assignee ? this.assignee.id : null,
name: this.name, for (const [field, isUpdated] of Object.entries(this.__updatedFields)) {
bug_tracker: this.bugTracker, if (isUpdated) {
labels: [...this.labels.map((el) => el.toJSON())], switch (field) {
}; case 'assignee':
taskData.assignee_id = this.assignee ? this.assignee.id : null;
break;
case 'name':
taskData.name = this.name;
break;
case 'bug_tracker':
taskData.bug_tracker = this.bugTracker;
break;
case 'labels':
taskData.labels = [...this.labels.map((el) => el.toJSON())];
break;
default:
break;
}
}
}
await serverProxy.tasks.saveTask(this.id, taskData); await serverProxy.tasks.saveTask(this.id, taskData);
this.updatedFields = {
assignee: false,
name: false,
bugTracker: false,
labels: false,
};
return this; return this;
} }

Loading…
Cancel
Save