Skip to content

Commit 148e607

Browse files
Merge pull request #8362 from cvat-ai/release-2.17.0
Release v2.17.0
2 parents 8323104 + 4d8621a commit 148e607

File tree

117 files changed

+3514
-1047
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

117 files changed

+3514
-1047
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ jobs:
248248
while [[ $(curl -s -o /dev/null -w "%{http_code}" localhost:8181/health?bundles) != "200" && max_tries -gt 0 ]]; do (( max_tries-- )); sleep 5; done
249249
250250
docker compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.ci.yml run cvat_ci /bin/bash \
251-
-c 'coverage run -a manage.py test cvat/apps && coverage json && mv coverage.json ${CONTAINER_COVERAGE_DATA_DIR}/unit_tests_coverage.json'
251+
-c 'coverage run -a manage.py test -v 2 cvat/apps && coverage json && mv coverage.json ${CONTAINER_COVERAGE_DATA_DIR}/unit_tests_coverage.json'
252252
253253
docker compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.ci.yml run cvat_ci /bin/bash \
254254
-c 'DISABLE_HUSKY=1 yarn --frozen-lockfile && yarn workspace cvat-core run test && mv cvat-core/reports/coverage/coverage-final.json ${CONTAINER_COVERAGE_DATA_DIR}'

CHANGELOG.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1616

1717
<!-- scriv-insert-here -->
1818

19+
<a id='changelog-2.17.0'></a>
20+
## \[2.17.0\] - 2024-08-27
21+
22+
### Added
23+
24+
- Added support for YOLOv8 formats
25+
(<https://github.com/cvat-ai/cvat/pull/8240>)
26+
27+
- Last assignee update date in quality reports, new options in quality settings
28+
(<https://github.com/cvat-ai/cvat/pull/8321>)
29+
30+
### Changed
31+
32+
- User sessions now expire after two weeks of inactivity
33+
(<https://github.com/cvat-ai/cvat/pull/8289>)
34+
35+
- A user changing their password will now invalidate all of their sessions
36+
except for the current one
37+
(<https://github.com/cvat-ai/cvat/pull/8289>)
38+
39+
### Deprecated
40+
41+
- Client events `upload:annotations`, `lock:object`, `change:attribute`, `change:label`
42+
(<https://github.com/cvat-ai/cvat/pull/8304>)
43+
44+
### Removed
45+
46+
- Client event `restore:job` (<https://github.com/cvat-ai/cvat/pull/8304>)
47+
48+
- Removed the `/auth/login-with-token` page
49+
(<https://github.com/cvat-ai/cvat/pull/8336>)
50+
51+
### Fixed
52+
53+
- Go back button behavior on analytics page
54+
(<https://github.com/cvat-ai/cvat/pull/8277>)
55+
56+
- Logging out of one session will no longer log the user out of all their
57+
other sessions
58+
(<https://github.com/cvat-ai/cvat/pull/8289>)
59+
60+
- Prevent export process from restarting when downloading a result file,
61+
that resulted in downloading a file with new request ID
62+
(<https://github.com/cvat-ai/cvat/pull/8216>)
63+
- Race condition occurred while handling parallel export requests
64+
(<https://github.com/cvat-ai/cvat/pull/8216>)
65+
- Requests filtering using format and target filters
66+
(<https://github.com/cvat-ai/cvat/pull/8216>)
67+
68+
- Sometimes it is not possible to switch workspace because active control broken after
69+
trying to create a tag with a shortcut (<https://github.com/cvat-ai/cvat/pull/8334>)
70+
1971
<a id='changelog-2.16.3'></a>
2072
## \[2.16.3\] - 2024-08-13
2173

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
ARG PIP_VERSION=24.0
22
ARG BASE_IMAGE=ubuntu:22.04
33

4-
FROM ${BASE_IMAGE} as build-image-base
4+
FROM ${BASE_IMAGE} AS build-image-base
55

66
RUN apt-get update && \
77
DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends install -yq \
@@ -84,7 +84,7 @@ RUN --mount=type=cache,target=/root/.cache/pip/http-v2 \
8484
-r /tmp/cvat/requirements/${CVAT_CONFIGURATION}.txt \
8585
-w /tmp/wheelhouse
8686

87-
FROM golang:1.22.4 AS build-smokescreen
87+
FROM golang:1.23.0 AS build-smokescreen
8888

8989
RUN git clone --filter=blob:none --no-checkout https://github.com/stripe/smokescreen.git
9090
RUN cd smokescreen && git checkout eb1ac09 && go build -o /tmp/smokescreen

Dockerfile.ui

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ DISABLE_SOURCE_MAPS="${DISABLE_SOURCE_MAPS}" \
3434
UI_APP_CONFIG="${UI_APP_CONFIG}" \
3535
SOURCE_MAPS_TOKEN="${SOURCE_MAPS_TOKEN}" yarn run build:cvat-ui
3636

37-
FROM nginx:1.25.4-alpine3.18
37+
FROM nginx:1.26.1-alpine3.19-slim
38+
3839
# Replace default.conf configuration to remove unnecessary rules
3940
COPY cvat-ui/react_nginx.conf /etc/nginx/conf.d/default.conf
4041
COPY --from=cvat-ui /tmp/cvat-ui/dist /usr/share/nginx/html/

cvat-canvas/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ Standard JS events are used.
7272
- canvas.reshape
7373
- canvas.fit
7474
- canvas.regionselected => {points: number[]}
75-
- canvas.dragshape => {id: number}
75+
- canvas.dragshape => {duration: number, state: ObjectState}
7676
- canvas.roiselected => {points: number[]}
77-
- canvas.resizeshape => {id: number}
77+
- canvas.resizeshape => {duration: number, state: ObjectState}
7878
- canvas.contextmenu => { mouseEvent: MouseEvent, objectState: ObjectState, pointID: number }
7979
- canvas.message => { messages: { type: 'text' | 'list'; content: string | string[]; className?: string; icon?: 'info' | 'loading' }[] | null, topic: string }
8080
- canvas.error => { exception: Error, domain?: string }

cvat-canvas/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cvat-canvas",
3-
"version": "2.20.8",
3+
"version": "2.20.9",
44
"type": "module",
55
"description": "Part of Computer Vision Annotation Tool which presents its canvas library",
66
"main": "src/canvas.ts",

cvat-canvas/src/typescript/canvasView.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,6 +1074,7 @@ export class CanvasViewImpl implements CanvasView, Listener {
10741074
}
10751075

10761076
if (state) {
1077+
let start = Date.now();
10771078
let aborted = false;
10781079
let skeletonSVGTemplate: SVG.G = null;
10791080
shape.addClass('cvat_canvas_shape_draggable');
@@ -1084,6 +1085,7 @@ export class CanvasViewImpl implements CanvasView, Listener {
10841085
draggableInstance.on('dragstart', (): void => {
10851086
onDragStart();
10861087
this.draggableShape = shape;
1088+
start = Date.now();
10871089
}).on('dragmove', (e: CustomEvent): void => {
10881090
onDragMove();
10891091
if (state.shapeType === 'skeleton' && e.target) {
@@ -1159,7 +1161,8 @@ export class CanvasViewImpl implements CanvasView, Listener {
11591161
bubbles: false,
11601162
cancelable: true,
11611163
detail: {
1162-
id: state.clientID,
1164+
state,
1165+
duration: Date.now() - start,
11631166
},
11641167
}),
11651168
);
@@ -1243,6 +1246,7 @@ export class CanvasViewImpl implements CanvasView, Listener {
12431246
if (state) {
12441247
let resized = false;
12451248
let aborted = false;
1249+
let start = Date.now();
12461250

12471251
(resizableInstance as any)
12481252
.resize({
@@ -1252,6 +1256,7 @@ export class CanvasViewImpl implements CanvasView, Listener {
12521256
.on('resizestart', (): void => {
12531257
onResizeStart();
12541258
resized = false;
1259+
start = Date.now();
12551260
this.resizableShape = shape;
12561261
})
12571262
.on('resizing', (e: CustomEvent): void => {
@@ -1344,7 +1349,8 @@ export class CanvasViewImpl implements CanvasView, Listener {
13441349
bubbles: false,
13451350
cancelable: true,
13461351
detail: {
1347-
id: state.clientID,
1352+
state,
1353+
duration: Date.now() - start,
13481354
},
13491355
}),
13501356
);

cvat-cli/requirements/base.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
cvat-sdk~=2.16.3
1+
cvat-sdk~=2.17.0
22
Pillow>=10.3.0
33
setuptools>=70.0.0 # not directly required, pinned by Snyk to avoid a vulnerability

cvat-cli/src/cvat_cli/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
VERSION = "2.16.3"
1+
VERSION = "2.17.0"

cvat-core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cvat-core",
3-
"version": "15.1.1",
3+
"version": "15.1.2",
44
"type": "module",
55
"description": "Part of Computer Vision Tool which presents an interface for client-side integration",
66
"main": "src/api.ts",

cvat-core/src/api-implementation.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,6 @@ export default function implementAPI(cvat: CVATCore): CVATCore {
137137
const result = await serverProxy.server.setAuthData(response);
138138
return result;
139139
});
140-
implementationMixin(cvat.server.removeAuthData, async () => {
141-
const result = await serverProxy.server.removeAuthData();
142-
return result;
143-
});
144140
implementationMixin(cvat.server.installedApps, async () => {
145141
const result = await serverProxy.server.installedApps();
146142
return result;

cvat-core/src/api.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,6 @@ function build(): CVATCore {
122122
const result = await PluginRegistry.apiWrapper(cvat.server.setAuthData, response);
123123
return result;
124124
},
125-
async removeAuthData() {
126-
const result = await PluginRegistry.apiWrapper(cvat.server.removeAuthData);
127-
return result;
128-
},
129125
async installedApps() {
130126
const result = await PluginRegistry.apiWrapper(cvat.server.installedApps);
131127
return result;

cvat-core/src/axios-tus.ts

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
// Copyright (C) 2024 CVAT.ai Corporation
2+
//
3+
// SPDX-License-Identifier: MIT
4+
5+
import Axios, { AxiosRequestConfig, AxiosResponse } from 'axios';
6+
import * as tus from 'tus-js-client';
7+
8+
class AxiosHttpResponse implements tus.HttpResponse {
9+
readonly #axiosResponse: AxiosResponse;
10+
11+
constructor(axiosResponse: AxiosResponse) {
12+
this.#axiosResponse = axiosResponse;
13+
}
14+
15+
getStatus(): number {
16+
return this.#axiosResponse.status;
17+
}
18+
getHeader(header: string): string | undefined {
19+
return this.#axiosResponse.headers[header.toLowerCase()];
20+
}
21+
getBody(): string {
22+
return this.#axiosResponse.data;
23+
}
24+
getUnderlyingObject(): AxiosResponse {
25+
return this.#axiosResponse;
26+
}
27+
}
28+
29+
class AxiosHttpRequest implements tus.HttpRequest {
30+
readonly #axiosConfig: AxiosRequestConfig;
31+
readonly #abortController: AbortController;
32+
33+
constructor(method: string, url: string) {
34+
this.#abortController = new AbortController();
35+
this.#axiosConfig = {
36+
method,
37+
url,
38+
headers: {},
39+
signal: this.#abortController.signal,
40+
validateStatus: () => true,
41+
};
42+
}
43+
44+
getMethod(): string {
45+
return this.#axiosConfig.method;
46+
}
47+
getURL(): string {
48+
return this.#axiosConfig.url;
49+
}
50+
51+
setHeader(header: string, value: string): void {
52+
this.#axiosConfig.headers[header.toLowerCase()] = value;
53+
}
54+
getHeader(header: string): string | undefined {
55+
return this.#axiosConfig.headers[header.toLowerCase()];
56+
}
57+
58+
setProgressHandler(handler: (bytesSent: number) => void): void {
59+
this.#axiosConfig.onUploadProgress = (progressEvent) => {
60+
handler(progressEvent.loaded);
61+
};
62+
}
63+
64+
async send(body: any): Promise<tus.HttpResponse> {
65+
const axiosResponse = await Axios({ ...this.#axiosConfig, data: body });
66+
return new AxiosHttpResponse(axiosResponse);
67+
}
68+
69+
async abort(): Promise<void> {
70+
this.#abortController.abort();
71+
}
72+
73+
getUnderlyingObject(): AxiosRequestConfig {
74+
return this.#axiosConfig;
75+
}
76+
}
77+
78+
class AxiosHttpStack implements tus.HttpStack {
79+
createRequest(method: string, url: string): tus.HttpRequest {
80+
return new AxiosHttpRequest(method, url);
81+
}
82+
getName(): string {
83+
return 'AxiosHttpStack';
84+
}
85+
}
86+
87+
export const axiosTusHttpStack = new AxiosHttpStack();

cvat-core/src/enums.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,9 @@ export enum EventScope {
9494
loadTool = 'load:cvat',
9595

9696
loadJob = 'load:job',
97+
loadWorkspace = 'load:workspace',
9798
saveJob = 'save:job',
98-
restoreJob = 'restore:job',
99-
uploadAnnotations = 'upload:annotations',
10099
exception = 'send:exception',
101-
sendTaskInfo = 'send:task_info',
102100

103101
drawObject = 'draw:object',
104102
pasteObject = 'paste:object',
@@ -107,14 +105,11 @@ export enum EventScope {
107105
dragObject = 'drag:object',
108106
resizeObject = 'resize:object',
109107
deleteObject = 'delete:object',
110-
lockObject = 'lock:object',
111108
mergeObjects = 'merge:objects',
112109
splitObjects = 'split:objects',
113110
groupObjects = 'group:objects',
114111
sliceObject = 'slice:object',
115112
joinObjects = 'join:objects',
116-
changeAttribute = 'change:attribute',
117-
changeLabel = 'change:label',
118113

119114
changeFrame = 'change:frame',
120115
zoomImage = 'zoom:image',

cvat-core/src/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ export default interface CVATCore {
7171
healthCheck: any;
7272
request: any;
7373
setAuthData: any;
74-
removeAuthData: any;
7574
installedApps: any;
7675
apiSchema: typeof serverProxy.server.apiSchema;
7776
};

0 commit comments

Comments
 (0)