Skip to content

Commit 04f40e9

Browse files
Merge branch '206-upload_email_to_imap_task-unicodeencodeerror-ascii-codec-can-t-encode-characters' into 'main'
2 parents c43fc23 + d85d852 commit 04f40e9

37 files changed

Lines changed: 900 additions & 500 deletions

.test_durations

Lines changed: 227 additions & 199 deletions
Large diffs are not rendered by default.

Frontend/src/app/api/generated/.openapi-generator/FILES

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ models/SummaryStatisticsModel.ts
7171
models/TranslateAllRequest.ts
7272
models/TranslateFileRequest.ts
7373
models/TreeNodeModel.ts
74-
models/UpdateArchiveModel.ts
74+
models/UpdateArchiveRequest.ts
7575
models/UpdateFileRequest.ts
7676
models/UpdateFilesRequest.ts
7777
models/ValidationError.ts

Frontend/src/app/api/generated/apis/ArchivesApi.ts

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import type {
1919
ArchiveRequest,
2020
ArchivesModel,
2121
HTTPValidationError,
22-
UpdateArchiveModel,
22+
UpdateArchiveRequest,
2323
} from "../models/index";
2424
import {
2525
ArchiveCreatedResponseFromJSON,
@@ -30,8 +30,8 @@ import {
3030
ArchivesModelToJSON,
3131
HTTPValidationErrorFromJSON,
3232
HTTPValidationErrorToJSON,
33-
UpdateArchiveModelFromJSON,
34-
UpdateArchiveModelToJSON,
33+
UpdateArchiveRequestFromJSON,
34+
UpdateArchiveRequestToJSON,
3535
} from "../models/index";
3636

3737
export interface CreateNewArchiveV1ArchivePostRequest {
@@ -43,9 +43,9 @@ export interface DownloadArchiveV1ArchiveArchiveIdGetRequest {
4343
encrypted?: boolean;
4444
}
4545

46-
export interface UpdateArchiveV1ArchiveArchiveIdPostRequest {
46+
export interface UpdateArchiveV1ArchiveArchiveIdPutRequest {
4747
archiveId: string;
48-
updateArchiveModel: UpdateArchiveModel;
48+
updateArchiveRequest: UpdateArchiveRequest;
4949
}
5050

5151
/**
@@ -201,24 +201,23 @@ export class ArchivesApi extends runtime.BaseAPI {
201201
}
202202

203203
/**
204-
* Update archive.
205204
* Update Archive
206205
*/
207-
async updateArchiveV1ArchiveArchiveIdPostRaw(
208-
requestParameters: UpdateArchiveV1ArchiveArchiveIdPostRequest,
206+
async updateArchiveV1ArchiveArchiveIdPutRaw(
207+
requestParameters: UpdateArchiveV1ArchiveArchiveIdPutRequest,
209208
initOverrides?: RequestInit | runtime.InitOverrideFunction,
210209
): Promise<runtime.ApiResponse<any>> {
211210
if (requestParameters["archiveId"] == null) {
212211
throw new runtime.RequiredError(
213212
"archiveId",
214-
'Required parameter "archiveId" was null or undefined when calling updateArchiveV1ArchiveArchiveIdPost().',
213+
'Required parameter "archiveId" was null or undefined when calling updateArchiveV1ArchiveArchiveIdPut().',
215214
);
216215
}
217216

218-
if (requestParameters["updateArchiveModel"] == null) {
217+
if (requestParameters["updateArchiveRequest"] == null) {
219218
throw new runtime.RequiredError(
220-
"updateArchiveModel",
221-
'Required parameter "updateArchiveModel" was null or undefined when calling updateArchiveV1ArchiveArchiveIdPost().',
219+
"updateArchiveRequest",
220+
'Required parameter "updateArchiveRequest" was null or undefined when calling updateArchiveV1ArchiveArchiveIdPut().',
222221
);
223222
}
224223

@@ -234,11 +233,11 @@ export class ArchivesApi extends runtime.BaseAPI {
234233
`{${"archive_id"}}`,
235234
encodeURIComponent(String(requestParameters["archiveId"])),
236235
),
237-
method: "POST",
236+
method: "PUT",
238237
headers: headerParameters,
239238
query: queryParameters,
240-
body: UpdateArchiveModelToJSON(
241-
requestParameters["updateArchiveModel"],
239+
body: UpdateArchiveRequestToJSON(
240+
requestParameters["updateArchiveRequest"],
242241
),
243242
},
244243
initOverrides,
@@ -252,14 +251,13 @@ export class ArchivesApi extends runtime.BaseAPI {
252251
}
253252

254253
/**
255-
* Update archive.
256254
* Update Archive
257255
*/
258-
async updateArchiveV1ArchiveArchiveIdPost(
259-
requestParameters: UpdateArchiveV1ArchiveArchiveIdPostRequest,
256+
async updateArchiveV1ArchiveArchiveIdPut(
257+
requestParameters: UpdateArchiveV1ArchiveArchiveIdPutRequest,
260258
initOverrides?: RequestInit | runtime.InitOverrideFunction,
261259
): Promise<any> {
262-
const response = await this.updateArchiveV1ArchiveArchiveIdPostRaw(
260+
const response = await this.updateArchiveV1ArchiveArchiveIdPutRaw(
263261
requestParameters,
264262
initOverrides,
265263
);

Frontend/src/app/api/generated/models/UpdateArchiveModel.ts renamed to Frontend/src/app/api/generated/models/UpdateArchiveRequest.ts

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,45 +15,44 @@
1515

1616
import { mapValues } from "../runtime";
1717
/**
18-
* Update archive model.
18+
*
1919
* @export
20-
* @interface UpdateArchiveModel
20+
* @interface UpdateArchiveRequest
2121
*/
22-
export interface UpdateArchiveModel {
22+
export interface UpdateArchiveRequest {
2323
/**
2424
*
2525
* @type {boolean}
26-
* @memberof UpdateArchiveModel
26+
* @memberof UpdateArchiveRequest
2727
*/
28-
hidden: boolean;
28+
hidden?: boolean;
2929
}
3030

3131
/**
32-
* Check if a given object implements the UpdateArchiveModel interface.
32+
* Check if a given object implements the UpdateArchiveRequest interface.
3333
*/
34-
export function instanceOfUpdateArchiveModel(value: object): boolean {
35-
if (!("hidden" in value)) return false;
34+
export function instanceOfUpdateArchiveRequest(value: object): boolean {
3635
return true;
3736
}
3837

39-
export function UpdateArchiveModelFromJSON(json: any): UpdateArchiveModel {
40-
return UpdateArchiveModelFromJSONTyped(json, false);
38+
export function UpdateArchiveRequestFromJSON(json: any): UpdateArchiveRequest {
39+
return UpdateArchiveRequestFromJSONTyped(json, false);
4140
}
4241

43-
export function UpdateArchiveModelFromJSONTyped(
42+
export function UpdateArchiveRequestFromJSONTyped(
4443
json: any,
4544
ignoreDiscriminator: boolean,
46-
): UpdateArchiveModel {
45+
): UpdateArchiveRequest {
4746
if (json == null) {
4847
return json;
4948
}
5049
return {
51-
hidden: json["hidden"],
50+
hidden: json["hidden"] == null ? undefined : json["hidden"],
5251
};
5352
}
5453

55-
export function UpdateArchiveModelToJSON(
56-
value?: UpdateArchiveModel | null,
54+
export function UpdateArchiveRequestToJSON(
55+
value?: UpdateArchiveRequest | null,
5756
): any {
5857
if (value == null) {
5958
return value;

Frontend/src/app/api/generated/models/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export * from "./SummaryStatisticsModel";
5757
export * from "./TranslateAllRequest";
5858
export * from "./TranslateFileRequest";
5959
export * from "./TreeNodeModel";
60-
export * from "./UpdateArchiveModel";
60+
export * from "./UpdateArchiveRequest";
6161
export * from "./UpdateFileRequest";
6262
export * from "./UpdateFilesRequest";
6363
export * from "./ValidationError";
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
from pydantic import BaseModel
22

33

4+
class CompleteEstimate(BaseModel):
5+
samples_count: int
6+
samples_period__s: int
7+
estimate_timestamp: int
8+
9+
410
class OverallQueuesStats(BaseModel):
511
messages_in_queues: int
612
complete_estimate_timestamp: int | None

backend/api/api/routers/archives.py

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
from typing import Annotated
33
from uuid import UUID
44

5-
from common.archive.archive_repository import ArchiveRepository
5+
from common.archive.archive_repository import (
6+
ArchiveNotFoundException,
7+
ArchiveRepository,
8+
)
69
from common.archive.archive_scheduling_service import ArchiveSchedulingService
710
from common.dependencies import (
811
get_archive_repository,
@@ -11,6 +14,7 @@
1114
)
1215
from common.services.lazybytes_service import LazyBytesService
1316
from common.services.query_builder import QueryParameters
17+
from common.services.task_scheduling_service import UpdateArchiveRequest
1418
from fastapi import APIRouter, Depends, HTTPException, Query, Response
1519
from fastapi.responses import StreamingResponse
1620
from pydantic import BaseModel
@@ -39,12 +43,6 @@ class ArchiveRequest(BaseModel):
3943
query: QueryParameters
4044

4145

42-
class UpdateArchiveModel(BaseModel):
43-
"""Update archive model."""
44-
45-
hidden: bool
46-
47-
4846
@router.get("/")
4947
def get_all_archives(
5048
archive_repository: ArchiveRepository = default_archive_repository,
@@ -107,15 +105,13 @@ def download_archive(
107105
)
108106

109107

110-
@router.post("/{archive_id}")
108+
@router.put("/{archive_id}")
111109
def update_archive(
112110
archive_id: UUID,
113-
update_file_model: UpdateArchiveModel,
114-
archive_repository: ArchiveRepository = default_archive_repository,
111+
update_archive_request: UpdateArchiveRequest,
112+
archive_scheduling_service: ArchiveSchedulingService = default_archive_scheduling_service,
115113
):
116-
"""Update archive."""
117-
archive = archive_repository.get_by_id(archive_id)
118-
if archive is None:
119-
raise HTTPException(status_code=404, detail="Invalid archive")
120-
archive.hidden = update_file_model.hidden
121-
archive_repository.update(archive, include={"hidden"})
114+
try:
115+
archive_scheduling_service.update_archive(archive_id, update_archive_request)
116+
except ArchiveNotFoundException as e:
117+
raise HTTPException(status_code=404, detail="Invalid archive") from e

backend/api/api/routers/queues.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
from common.dependencies import get_queues_service
66
from common.services.queues_service import QueuesService
77
from fastapi import APIRouter, Depends
8-
from pydantic import BaseModel
98
from sklearn.linear_model import LinearRegression
109

11-
from api.models.queues_model import OverallQueuesStats
10+
from api.models.queues_model import CompleteEstimate, OverallQueuesStats
1211

1312
router = APIRouter()
1413

@@ -60,12 +59,6 @@ def get_message_count(
6059
return message_count
6160

6261

63-
class CompleteEstimate(BaseModel):
64-
samples_count: int
65-
samples_period__s: int
66-
estimate_timestamp: int
67-
68-
6962
def get_completed_estimate_for_period(
7063
sample_period__s: int,
7164
queue_name: str | None = None,

backend/api/tests/test_archives.py

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
)
88
from common.services.lazybytes_service import LazyBytes
99
from common.services.query_builder import QueryParameters
10+
from common.services.task_scheduling_service import UpdateArchiveRequest
1011
from fastapi.testclient import TestClient
1112

1213
from api.models.archives_model import ArchivesModel
@@ -91,24 +92,15 @@ def test_download_archive(client: TestClient):
9192

9293
def test_hide_archive(client: TestClient):
9394
query = QueryParameters(query_id="0123456789", search_string="*")
94-
content = [b"file content", b"and", b"another", b"chunk"]
95-
content_encrypted = [b"encrypted file content", b"and", b"another", b"chunk"]
96-
archive = Archive(
97-
query=query,
98-
plain_file=StoredArchive(
99-
storage_data=LazyBytes(service_id=str(ObjectId())),
100-
sha256="",
101-
size=len(content),
102-
),
103-
encrypted_file=StoredArchive(
104-
storage_data=LazyBytes(service_id=str(ObjectId())),
105-
sha256="",
106-
size=len(content_encrypted),
107-
),
108-
)
109-
get_archive_repository().get_by_id.return_value = archive
95+
archive = Archive(query=query)
96+
97+
request = UpdateArchiveRequest(hidden=True)
11098

111-
response = client.post(f"/v1/archive/{archive.id_}", json={"hidden": True})
99+
get_archive_scheduling_service().update_archive.return_value = None
100+
101+
response = client.put(f"/v1/archive/{archive.id_}", json=request.model_dump())
112102

113103
assert response.status_code == 200
114-
get_archive_repository().update.assert_called_once_with(archive, include={"hidden"})
104+
get_archive_scheduling_service().update_archive.assert_called_once_with(
105+
archive.id_, request
106+
)

backend/api/tests/test_queues.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
from common.dependencies import get_queues_service
44
from fastapi.testclient import TestClient
55

6-
from api.models.queues_model import OverallQueuesStats
7-
from api.routers.queues import CompleteEstimate
6+
from api.models.queues_model import CompleteEstimate, OverallQueuesStats
87

98

109
def test_get_overall_queue_stats(client: TestClient):

0 commit comments

Comments
 (0)