From dd0ec011228f18ea471befd0a846efa8e58e128a Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Sun, 8 Dec 2024 00:04:50 +0100 Subject: [PATCH 01/22] add saveset to analyzer Signed-off-by: engelharddirk --- apps/analyzer/metadata_analyzer/analyzer.py | 1 + apps/analyzer/metadata_analyzer/creation_date_alert.py | 4 ++-- apps/analyzer/metadata_analyzer/models.py | 1 + apps/analyzer/metadata_analyzer/size_alert.py | 3 ++- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/analyzer/metadata_analyzer/analyzer.py b/apps/analyzer/metadata_analyzer/analyzer.py index f0ca7faa..546aeef8 100644 --- a/apps/analyzer/metadata_analyzer/analyzer.py +++ b/apps/analyzer/metadata_analyzer/analyzer.py @@ -29,6 +29,7 @@ def _convert_result(result): }[result.fdi_type] return { "id": result.uuid, + "savesetName": result.saveset, "sizeMB": result.data_size / 1_000_000, "creationDate": result.start_time.isoformat(), "type": backup_type diff --git a/apps/analyzer/metadata_analyzer/creation_date_alert.py b/apps/analyzer/metadata_analyzer/creation_date_alert.py index ab0dbc6b..8b9c4aad 100644 --- a/apps/analyzer/metadata_analyzer/creation_date_alert.py +++ b/apps/analyzer/metadata_analyzer/creation_date_alert.py @@ -1,12 +1,12 @@ class CreationDateAlert: def __init__(self, result, reference_date): - self.uuid = result.uuid + self.backup_saveset = result.saveset self.date = result.start_time self.reference_date = reference_date def as_json(self): return { - "backupId": self.uuid, + "backupSavesetName": self.backup_saveset, "date": self.date.isoformat(), "referenceDate": self.reference_date.isoformat() } diff --git a/apps/analyzer/metadata_analyzer/models.py b/apps/analyzer/metadata_analyzer/models.py index 04cb40ba..8737c079 100644 --- a/apps/analyzer/metadata_analyzer/models.py +++ b/apps/analyzer/metadata_analyzer/models.py @@ -8,6 +8,7 @@ class BackupData(Base): __tablename__ = "BackupData" id: Mapped[str] = mapped_column(primary_key=True) + saveset: Mapped[str] sizeMB: Mapped[int] creationDate: Mapped[datetime] bio: Mapped[str] diff --git a/apps/analyzer/metadata_analyzer/size_alert.py b/apps/analyzer/metadata_analyzer/size_alert.py index 98da0c3e..438dd355 100644 --- a/apps/analyzer/metadata_analyzer/size_alert.py +++ b/apps/analyzer/metadata_analyzer/size_alert.py @@ -1,13 +1,14 @@ class SizeAlert: def __init__(self, result, reference_size): self.uuid = result.uuid + self.backup_saveset = result.saveset self.size = result.data_size / 1_000_000 self.reference_size = reference_size / 1_000_000 self.date = result.start_time def as_json(self): return { - "backupId": self.uuid, + "backupSavesetName": self.backup_saveset, "size": self.size, "referenceSize": self.reference_size } From 2bd40365dddcfb9ad19e8836fcab28c7eea0babf Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Sun, 8 Dec 2024 00:08:06 +0100 Subject: [PATCH 02/22] use saveset in alert dtos Signed-off-by: engelharddirk --- apps/backend/src/app/alerting/alerting.service.ts | 12 ++++++------ .../dto/alerts/createCreationDateAlert.dto.ts | 4 ++-- .../app/alerting/dto/alerts/createSizeAlert.dto.ts | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/backend/src/app/alerting/alerting.service.ts b/apps/backend/src/app/alerting/alerting.service.ts index d436dad6..7d9f6b0a 100644 --- a/apps/backend/src/app/alerting/alerting.service.ts +++ b/apps/backend/src/app/alerting/alerting.service.ts @@ -108,7 +108,7 @@ export class AlertingService { async createSizeAlert(createSizeAlertDto: CreateSizeAlertDto) { // Check if alert already exists const existingAlertEntity = await this.sizeAlertRepository.findOneBy({ - backup: { id: createSizeAlertDto.backupId }, + backup: { id: createSizeAlertDto.backupSavesetName }, }); if (existingAlertEntity) { @@ -121,11 +121,11 @@ export class AlertingService { alert.referenceSize = createSizeAlertDto.referenceSize; const backup = await this.backupDataService.findOneById( - createSizeAlertDto.backupId + createSizeAlertDto.backupSavesetName ); if (!backup) { throw new NotFoundException( - `Backup with id ${createSizeAlertDto.backupId} not found` + `Backup with id ${createSizeAlertDto.backupSavesetName} not found` ); } alert.backup = backup; @@ -150,7 +150,7 @@ export class AlertingService { ) { // Check if alert already exists const existingAlertEntity = await this.creationDateRepository.findOneBy({ - backup: { id: createCreationDateAlertDto.backupId }, + backup: { id: createCreationDateAlertDto.backupSavesetName }, }); if (existingAlertEntity) { @@ -163,11 +163,11 @@ export class AlertingService { alert.referenceDate = createCreationDateAlertDto.referenceDate; const backup = await this.backupDataService.findOneById( - createCreationDateAlertDto.backupId + createCreationDateAlertDto.backupSavesetName ); if (!backup) { throw new NotFoundException( - `Backup with id ${createCreationDateAlertDto.backupId} not found` + `Backup with id ${createCreationDateAlertDto.backupSavesetName} not found` ); } alert.backup = backup; diff --git a/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts b/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts index 4dde938c..06b9d20f 100644 --- a/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts +++ b/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts @@ -2,10 +2,10 @@ import { ApiProperty } from '@nestjs/swagger'; export class CreateCreationDateAlertDto { @ApiProperty({ - description: 'Id of the belonging Backup', + description: 'SAveset name of the belonging backup', required: true, }) - backupId!: string; + backupSavesetName!: string; @ApiProperty({ description: 'Date, the backup started', diff --git a/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts b/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts index ed262957..5fbcd7a9 100644 --- a/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts +++ b/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts @@ -2,10 +2,10 @@ import { ApiProperty } from '@nestjs/swagger'; export class CreateSizeAlertDto { @ApiProperty({ - description: 'Id of the belonging Backup', + description: 'Saveset name of the belonging backup', required: true, }) - backupId!: string; + backupSavesetName!: string; @ApiProperty({ description: 'Size of the Backup, which is the reason for the alert', From a51dca4165105eb4d04bc4f730f34f6f17a72c59 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Sun, 8 Dec 2024 00:10:54 +0100 Subject: [PATCH 03/22] add saveset name to BackupDataEntity Signed-off-by: engelharddirk --- .../backend/src/app/backupData/entity/backupData.entity.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/backend/src/app/backupData/entity/backupData.entity.ts b/apps/backend/src/app/backupData/entity/backupData.entity.ts index fc64f526..3a825b51 100644 --- a/apps/backend/src/app/backupData/entity/backupData.entity.ts +++ b/apps/backend/src/app/backupData/entity/backupData.entity.ts @@ -12,6 +12,13 @@ export class BackupDataEntity { @PrimaryColumn() id!: string; + @ApiProperty({ + description: 'saveset name of the backup', + required: true, + }) + @PrimaryColumn() + backupSavesetName!: string; + @ApiProperty({ description: 'Size of Backup in MB', nullable: false, From 12a1e2b706b9aed6718d365d478dc820392890a1 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Mon, 9 Dec 2024 14:25:51 +0100 Subject: [PATCH 04/22] leave uuid in dto Signed-off-by: engelharddirk --- apps/analyzer/metadata_analyzer/creation_date_alert.py | 1 + .../app/alerting/dto/alerts/createCreationDateAlert.dto.ts | 7 +++++++ .../src/app/alerting/dto/alerts/createSizeAlert.dto.ts | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/apps/analyzer/metadata_analyzer/creation_date_alert.py b/apps/analyzer/metadata_analyzer/creation_date_alert.py index 8b9c4aad..bdb48835 100644 --- a/apps/analyzer/metadata_analyzer/creation_date_alert.py +++ b/apps/analyzer/metadata_analyzer/creation_date_alert.py @@ -1,5 +1,6 @@ class CreationDateAlert: def __init__(self, result, reference_date): + self.uuid = result.uuid self.backup_saveset = result.saveset self.date = result.start_time self.reference_date = reference_date diff --git a/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts b/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts index 06b9d20f..69e64e26 100644 --- a/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts +++ b/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts @@ -1,6 +1,13 @@ import { ApiProperty } from '@nestjs/swagger'; export class CreateCreationDateAlertDto { + + @ApiProperty({ + description: 'Uuid of the Backup', + required: true, + }) + backupUuid!: string; + @ApiProperty({ description: 'SAveset name of the belonging backup', required: true, diff --git a/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts b/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts index 5fbcd7a9..6efb8e84 100644 --- a/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts +++ b/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts @@ -1,6 +1,13 @@ import { ApiProperty } from '@nestjs/swagger'; export class CreateSizeAlertDto { + + @ApiProperty({ + description: 'Uuid of the Backup', + required: true, + }) + backupUuid!: string; + @ApiProperty({ description: 'Saveset name of the belonging backup', required: true, From 0f1201f435b03c98ab1512f733c0f943053b9554 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Mon, 9 Dec 2024 15:03:53 +0100 Subject: [PATCH 05/22] use proper type checking in analyzer file Signed-off-by: engelharddirk --- apps/analyzer/metadata_analyzer/analyzer.py | 14 ++++++++++++-- .../metadata_analyzer/creation_date_alert.py | 3 ++- apps/analyzer/metadata_analyzer/database.py | 2 +- apps/analyzer/metadata_analyzer/size_alert.py | 1 + apps/analyzer/pyproject.toml | 2 +- .../src/app/backupData/dto/createBackupData.dto.ts | 6 ++++++ 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/apps/analyzer/metadata_analyzer/analyzer.py b/apps/analyzer/metadata_analyzer/analyzer.py index 8e38cae5..c2bad345 100644 --- a/apps/analyzer/metadata_analyzer/analyzer.py +++ b/apps/analyzer/metadata_analyzer/analyzer.py @@ -1,8 +1,18 @@ import datetime +from metadata_analyzer.database import Database +from metadata_analyzer.backend import Backend +from metadata_analyzer.simple_analyzer import SimpleAnalyzer +from metadata_analyzer.simple_rule_based_analyzer import SimpleRuleBasedAnalyzer class Analyzer: - def init(database, backend, simple_analyzer, simple_rule_based_analyzer): + database: Database + backend: Backend + simple_analyzer: SimpleAnalyzer + simple_rule_based_analyzer: SimpleRuleBasedAnalyzer + + @staticmethod + def initialize(database: Database, backend: Backend, simple_analyzer: SimpleAnalyzer, simple_rule_based_analyzer: SimpleRuleBasedAnalyzer) -> None: Analyzer.database = database Analyzer.backend = backend Analyzer.simple_analyzer = simple_analyzer @@ -109,7 +119,7 @@ def _send_Tasks(): return {"count": count} - def update_data(): + def update_data(self): Analyzer._send_Tasks() Analyzer._send_Backups() diff --git a/apps/analyzer/metadata_analyzer/creation_date_alert.py b/apps/analyzer/metadata_analyzer/creation_date_alert.py index bdb48835..5e10acfe 100644 --- a/apps/analyzer/metadata_analyzer/creation_date_alert.py +++ b/apps/analyzer/metadata_analyzer/creation_date_alert.py @@ -1,12 +1,13 @@ class CreationDateAlert: def __init__(self, result, reference_date): - self.uuid = result.uuid + self.backup_uuid = result.uuid self.backup_saveset = result.saveset self.date = result.start_time self.reference_date = reference_date def as_json(self): return { + "backupUuid!": self.backup_uuid, "backupSavesetName": self.backup_saveset, "date": self.date.isoformat(), "referenceDate": self.reference_date.isoformat() diff --git a/apps/analyzer/metadata_analyzer/database.py b/apps/analyzer/metadata_analyzer/database.py index b2e041b5..b53beb80 100644 --- a/apps/analyzer/metadata_analyzer/database.py +++ b/apps/analyzer/metadata_analyzer/database.py @@ -1,7 +1,7 @@ -import pg8000.dbapi from sqlalchemy import create_engine, select from sqlalchemy.orm import Session from metadata_analyzer.models import BackupData, Result, Tasks +import pg8000.dbapi import os diff --git a/apps/analyzer/metadata_analyzer/size_alert.py b/apps/analyzer/metadata_analyzer/size_alert.py index 438dd355..556ed2b1 100644 --- a/apps/analyzer/metadata_analyzer/size_alert.py +++ b/apps/analyzer/metadata_analyzer/size_alert.py @@ -8,6 +8,7 @@ def __init__(self, result, reference_size): def as_json(self): return { + "backupId": self.uuid, "backupSavesetName": self.backup_saveset, "size": self.size, "referenceSize": self.reference_size diff --git a/apps/analyzer/pyproject.toml b/apps/analyzer/pyproject.toml index 97f43704..b54e9eae 100644 --- a/apps/analyzer/pyproject.toml +++ b/apps/analyzer/pyproject.toml @@ -24,7 +24,7 @@ readme = 'README.md' python = ">=3.9,<3.12" flask = "^3.0.3" python-dotenv = "^1.0.1" - sqlalchemy = "^2.0.36" + sqlalchemy = {extras = ["mypy"], version = "^2.0.36"} pg8000 = "^1.31.2" requests = "^2.32.3" flasgger = "^0.9.7.1" diff --git a/apps/backend/src/app/backupData/dto/createBackupData.dto.ts b/apps/backend/src/app/backupData/dto/createBackupData.dto.ts index 92333cb4..9cc1acc6 100644 --- a/apps/backend/src/app/backupData/dto/createBackupData.dto.ts +++ b/apps/backend/src/app/backupData/dto/createBackupData.dto.ts @@ -16,6 +16,12 @@ export class CreateBackupDataDto { @IsUUID() id!: string; + @ApiProperty({ + description: 'saveset name of the backup', + required: true, + }) + savesetName!: string; + @ApiProperty({ description: 'Size of Backup in MB', nullable: false, From f1b7b91229280a8d14493eec02128e6b4d799c8f Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Mon, 9 Dec 2024 15:55:01 +0100 Subject: [PATCH 06/22] leave uuid asis, just add saveset Signed-off-by: engelharddirk --- apps/analyzer/metadata_analyzer/analyzer.py | 15 ++------------- apps/backend/src/app/alerting/alerting.service.ts | 10 +++++----- .../dto/alerts/createCreationDateAlert.dto.ts | 2 +- .../app/backupData/entity/backupData.entity.ts | 4 ++-- apps/backend/src/app/db-config.service.ts | 2 ++ .../migrations/1733754552133-AddSavesetName.ts | 14 ++++++++++++++ apps/frontend/src/app/shared/types/backup.ts | 1 + 7 files changed, 27 insertions(+), 21 deletions(-) create mode 100644 apps/backend/src/app/migrations/1733754552133-AddSavesetName.ts diff --git a/apps/analyzer/metadata_analyzer/analyzer.py b/apps/analyzer/metadata_analyzer/analyzer.py index c2bad345..5b7a91e8 100644 --- a/apps/analyzer/metadata_analyzer/analyzer.py +++ b/apps/analyzer/metadata_analyzer/analyzer.py @@ -1,18 +1,7 @@ import datetime -from metadata_analyzer.database import Database -from metadata_analyzer.backend import Backend -from metadata_analyzer.simple_analyzer import SimpleAnalyzer -from metadata_analyzer.simple_rule_based_analyzer import SimpleRuleBasedAnalyzer - - class Analyzer: - database: Database - backend: Backend - simple_analyzer: SimpleAnalyzer - simple_rule_based_analyzer: SimpleRuleBasedAnalyzer - @staticmethod - def initialize(database: Database, backend: Backend, simple_analyzer: SimpleAnalyzer, simple_rule_based_analyzer: SimpleRuleBasedAnalyzer) -> None: + def init(database, backend, simple_analyzer, simple_rule_based_analyzer): Analyzer.database = database Analyzer.backend = backend Analyzer.simple_analyzer = simple_analyzer @@ -119,7 +108,7 @@ def _send_Tasks(): return {"count": count} - def update_data(self): + def update_data(): Analyzer._send_Tasks() Analyzer._send_Backups() diff --git a/apps/backend/src/app/alerting/alerting.service.ts b/apps/backend/src/app/alerting/alerting.service.ts index 7d9f6b0a..8ca881f6 100644 --- a/apps/backend/src/app/alerting/alerting.service.ts +++ b/apps/backend/src/app/alerting/alerting.service.ts @@ -108,7 +108,7 @@ export class AlertingService { async createSizeAlert(createSizeAlertDto: CreateSizeAlertDto) { // Check if alert already exists const existingAlertEntity = await this.sizeAlertRepository.findOneBy({ - backup: { id: createSizeAlertDto.backupSavesetName }, + backup: { id: createSizeAlertDto.backupUuid }, }); if (existingAlertEntity) { @@ -121,7 +121,7 @@ export class AlertingService { alert.referenceSize = createSizeAlertDto.referenceSize; const backup = await this.backupDataService.findOneById( - createSizeAlertDto.backupSavesetName + createSizeAlertDto.backupUuid ); if (!backup) { throw new NotFoundException( @@ -150,7 +150,7 @@ export class AlertingService { ) { // Check if alert already exists const existingAlertEntity = await this.creationDateRepository.findOneBy({ - backup: { id: createCreationDateAlertDto.backupSavesetName }, + backup: { id: createCreationDateAlertDto.backupUuid }, }); if (existingAlertEntity) { @@ -163,11 +163,11 @@ export class AlertingService { alert.referenceDate = createCreationDateAlertDto.referenceDate; const backup = await this.backupDataService.findOneById( - createCreationDateAlertDto.backupSavesetName + createCreationDateAlertDto.backupUuid ); if (!backup) { throw new NotFoundException( - `Backup with id ${createCreationDateAlertDto.backupSavesetName} not found` + `Backup with id ${createCreationDateAlertDto.backupUuid} not found` ); } alert.backup = backup; diff --git a/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts b/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts index 69e64e26..ecb00c67 100644 --- a/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts +++ b/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts @@ -9,7 +9,7 @@ export class CreateCreationDateAlertDto { backupUuid!: string; @ApiProperty({ - description: 'SAveset name of the belonging backup', + description: 'Saveset name of the belonging backup', required: true, }) backupSavesetName!: string; diff --git a/apps/backend/src/app/backupData/entity/backupData.entity.ts b/apps/backend/src/app/backupData/entity/backupData.entity.ts index 3a825b51..fc5f9cbc 100644 --- a/apps/backend/src/app/backupData/entity/backupData.entity.ts +++ b/apps/backend/src/app/backupData/entity/backupData.entity.ts @@ -16,8 +16,8 @@ export class BackupDataEntity { description: 'saveset name of the backup', required: true, }) - @PrimaryColumn() - backupSavesetName!: string; + @Column() + savesetName!: string; @ApiProperty({ description: 'Size of Backup in MB', diff --git a/apps/backend/src/app/db-config.service.ts b/apps/backend/src/app/db-config.service.ts index a96cffaa..18cdb0f7 100644 --- a/apps/backend/src/app/db-config.service.ts +++ b/apps/backend/src/app/db-config.service.ts @@ -22,6 +22,7 @@ import { TaskEntity } from './tasks/entity/task.entity'; import { Tasks1733397652480 } from './migrations/1733397652480-Tasks'; import { MailReceiverEntity } from './utils/mail/entity/MailReceiver.entity'; import { MailReceiver1733580333590 } from './migrations/1733580333590-MailReceiver'; +import { AddSavesetName1733754552133 } from './migrations/1733754552133-AddSavesetName'; /** * Used by NestJS to reach database. @@ -65,6 +66,7 @@ export class DbConfigService implements TypeOrmOptionsFactory { CreationDateAlert1733070019992, Tasks1733397652480, MailReceiver1733580333590, + AddSavesetName1733754552133, ], logging: true, logger: 'debug' diff --git a/apps/backend/src/app/migrations/1733754552133-AddSavesetName.ts b/apps/backend/src/app/migrations/1733754552133-AddSavesetName.ts new file mode 100644 index 00000000..310e47bc --- /dev/null +++ b/apps/backend/src/app/migrations/1733754552133-AddSavesetName.ts @@ -0,0 +1,14 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddSavesetName1733754552133 implements MigrationInterface { + name = 'AddSavesetName1733754552133' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "BackupData" ADD "savesetName" character varying NOT NULL`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "BackupData" DROP COLUMN "savesetName"`); + } + +} diff --git a/apps/frontend/src/app/shared/types/backup.ts b/apps/frontend/src/app/shared/types/backup.ts index c3b2a447..2dcf683e 100644 --- a/apps/frontend/src/app/shared/types/backup.ts +++ b/apps/frontend/src/app/shared/types/backup.ts @@ -1,5 +1,6 @@ export interface Backup { id: string; + savesetName: string; sizeMB: number; creationDate: Date; taskId?: { From b1cbb5bb8a8dba4d3bd211447a89eb8b8ef5d7f2 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Mon, 9 Dec 2024 16:39:47 +0100 Subject: [PATCH 07/22] begin frontend adaptation Signed-off-by: engelharddirk --- apps/analyzer/metadata_analyzer/analyzer.py | 1 + .../backups/backups/backupfilter.ts | 8 +++-- .../backups/backups/backups.component.html | 30 +++++++++++++++++++ .../backups/backups/backups.component.spec.ts | 2 ++ .../backups/backups/backups.component.ts | 2 ++ 5 files changed, 41 insertions(+), 2 deletions(-) diff --git a/apps/analyzer/metadata_analyzer/analyzer.py b/apps/analyzer/metadata_analyzer/analyzer.py index 5b7a91e8..d180ffd4 100644 --- a/apps/analyzer/metadata_analyzer/analyzer.py +++ b/apps/analyzer/metadata_analyzer/analyzer.py @@ -21,6 +21,7 @@ def analyze(): # Convert a result from the database into the format used by the backend def _convert_result(result): + print(result.saveset) backup_type = { "F": "FULL", "I": "INCREMENTAL", diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backupfilter.ts b/apps/frontend/src/app/backups-overview/backups/backups/backupfilter.ts index bc83ecae..78cd8d62 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backupfilter.ts +++ b/apps/frontend/src/app/backups-overview/backups/backups/backupfilter.ts @@ -6,6 +6,7 @@ export class CustomFilter implements ClrDatagridFilterInterface { public ranges: { fromDate: string | null; toDate: string | null; + saveset: string | null; fromSizeMB: number | null; toSizeMB: number | null; id: string | null; @@ -17,12 +18,13 @@ export class CustomFilter implements ClrDatagridFilterInterface { toSizeMB: null, id: null, taskName: null, + saveset: null }; public changes = new Subject(); - public filterType: 'date' | 'size' | 'id' | 'taskName'; + public filterType: 'date' | 'size' | 'id' | 'taskName' | 'saveset'; - constructor(filterType: 'date' | 'size' | 'id' | 'taskName') { + constructor(filterType: 'date' | 'size' | 'id' | 'taskName' | 'saveset') { this.filterType = filterType; } @@ -33,6 +35,8 @@ export class CustomFilter implements ClrDatagridFilterInterface { return !!(this.ranges.fromSizeMB || this.ranges.toSizeMB); } else if (this.filterType === 'taskName') { return !!this.ranges.taskName; + } else if (this.filterType === 'saveset') { + return !!this.ranges.saveset; } else { return !!this.ranges.id; } diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html index d8dee7e9..48ec379b 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html @@ -119,6 +119,36 @@

All Backups:

+ + + Size (MB) + + + + + + + + + + + + + Task diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts index f31d5846..f677d1c2 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts @@ -20,11 +20,13 @@ describe('BackupsComponent', () => { id: '1', sizeMB: 500, creationDate: new Date(), + savesetName: '' }, { id: '2', sizeMB: 750, creationDate: new Date(), + savesetName: '' }, ], paginationData: { diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts index 666d3cb3..b4140843 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts @@ -51,6 +51,7 @@ export class BackupsComponent implements AfterViewInit, OnDestroy, OnInit { backupSizeFilter: CustomFilter; backupDateFilter: CustomFilter; backupIdFilter: CustomFilter; + backupSavesetFilter: CustomFilter; taskFilter: CustomFilter; readonly backups$: Observable>; @@ -67,6 +68,7 @@ export class BackupsComponent implements AfterViewInit, OnDestroy, OnInit { ) { this.backupSizeFilter = new CustomFilter('size'); this.backupDateFilter = new CustomFilter('date'); + this.backupSavesetFilter = new CustomFilter('saveset'); this.backupIdFilter = new CustomFilter('id'); this.taskFilter = new CustomFilter('taskName'); From b3d194e5389d181633213adf6b3c3da60028901a Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Mon, 9 Dec 2024 16:40:51 +0100 Subject: [PATCH 08/22] fix frontend test Signed-off-by: engelharddirk --- .../backups/backups/backups.component.spec.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts index f677d1c2..81c400d3 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts @@ -127,6 +127,7 @@ describe('BackupsComponent', () => { toDate: new Date('2023-12-31').toISOString(), id: null, fromSizeMB: null, + saveset: null, toSizeMB: null, taskName: null, }; @@ -145,6 +146,7 @@ describe('BackupsComponent', () => { sizeFilter.ranges = { fromDate: null, toDate: null, + saveset: null, fromSizeMB: 100, toSizeMB: 500, id: null, @@ -166,6 +168,7 @@ describe('BackupsComponent', () => { fromDate: null, toDate: null, fromSizeMB: null, + saveset: null, toSizeMB: null, id: '000d88', taskName: null, @@ -184,6 +187,7 @@ describe('BackupsComponent', () => { taskFilter.ranges = { fromDate: null, toDate: null, + saveset: null, fromSizeMB: null, toSizeMB: null, id: null, From ad83f098f773137628ea90aeafaa299a44821444 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Mon, 9 Dec 2024 16:49:24 +0100 Subject: [PATCH 09/22] add saveset name to table Signed-off-by: engelharddirk --- .../backups/backups/backups.component.html | 55 ++++++------------- 1 file changed, 17 insertions(+), 38 deletions(-) diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html index 48ec379b..e8bac2d5 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html @@ -86,33 +86,20 @@

All Backups:

/> -
+
- + + - Size (MB) - - - - - + Saveset + - + @@ -122,16 +109,14 @@

All Backups:

Size (MB) - + @@ -140,9 +125,7 @@

All Backups:

clrInput type="number" [(ngModel)]="backupSizeFilter.ranges.toSizeMB" - (ngModelChange)=" - backupSizeFilter.updateRanges({ toSizeMB: $event }) - " + (ngModelChange)="backupSizeFilter.updateRanges({ toSizeMB: $event })" />
@@ -163,8 +146,7 @@

All Backups:

/>
-
+
All Backups: clrInput type="date" [(ngModel)]="backupDateFilter.ranges.fromDate" - (ngModelChange)=" - backupDateFilter.updateRanges({ fromDate: $event }) - " + (ngModelChange)="backupDateFilter.updateRanges({ fromDate: $event })" /> @@ -191,9 +171,7 @@

All Backups:

clrInput type="date" [(ngModel)]="backupDateFilter.ranges.toDate" - (ngModelChange)=" - backupDateFilter.updateRanges({ toDate: $event }) - " + (ngModelChange)="backupDateFilter.updateRanges({ toDate: $event })" />
@@ -203,6 +181,7 @@

All Backups:

We couldn't find any backups! {{ backup.id }} + {{ backup.savesetName }} {{ backup.sizeMB }} {{ backup.taskId?.displayName ?? '' }} {{ backup.creationDate | date }} From 694c65f2b5d178d9b81082001ee29ca7d953cfb3 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Mon, 9 Dec 2024 17:16:39 +0100 Subject: [PATCH 10/22] refactor Signed-off-by: engelharddirk --- apps/analyzer/metadata_analyzer/analyzer.py | 2 +- apps/analyzer/metadata_analyzer/creation_date_alert.py | 2 +- apps/analyzer/metadata_analyzer/size_alert.py | 2 +- apps/backend/src/app/alerting/alerting.service.ts | 2 +- .../alerting/dto/alerts/createCreationDateAlert.dto.ts | 2 +- .../src/app/alerting/dto/alerts/createSizeAlert.dto.ts | 2 +- .../src/app/backupData/dto/createBackupData.dto.ts | 2 +- .../src/app/backupData/entity/backupData.entity.ts | 2 +- apps/backend/src/app/db-config.service.ts | 4 ++-- ...2133-AddSavesetName.ts => 1733760846109-AddSaveset.ts} | 8 ++++---- .../backups/backups/backups.component.html | 4 ++-- .../backups/backups/backups.component.spec.ts | 4 ++-- .../backups-overview/backups/backups/backups.component.ts | 1 + apps/frontend/src/app/shared/types/backup.ts | 2 +- 14 files changed, 20 insertions(+), 19 deletions(-) rename apps/backend/src/app/migrations/{1733754552133-AddSavesetName.ts => 1733760846109-AddSaveset.ts} (65%) diff --git a/apps/analyzer/metadata_analyzer/analyzer.py b/apps/analyzer/metadata_analyzer/analyzer.py index d180ffd4..205eee5a 100644 --- a/apps/analyzer/metadata_analyzer/analyzer.py +++ b/apps/analyzer/metadata_analyzer/analyzer.py @@ -30,7 +30,7 @@ def _convert_result(result): }[result.fdi_type] return { "id": result.uuid, - "savesetName": result.saveset, + "saveset": result.saveset, "sizeMB": result.data_size / 1_000_000, "creationDate": result.start_time.isoformat(), "type": backup_type, diff --git a/apps/analyzer/metadata_analyzer/creation_date_alert.py b/apps/analyzer/metadata_analyzer/creation_date_alert.py index 5e10acfe..3aa7d7f1 100644 --- a/apps/analyzer/metadata_analyzer/creation_date_alert.py +++ b/apps/analyzer/metadata_analyzer/creation_date_alert.py @@ -8,7 +8,7 @@ def __init__(self, result, reference_date): def as_json(self): return { "backupUuid!": self.backup_uuid, - "backupSavesetName": self.backup_saveset, + "backupSaveset": self.backup_saveset, "date": self.date.isoformat(), "referenceDate": self.reference_date.isoformat() } diff --git a/apps/analyzer/metadata_analyzer/size_alert.py b/apps/analyzer/metadata_analyzer/size_alert.py index 556ed2b1..382f8223 100644 --- a/apps/analyzer/metadata_analyzer/size_alert.py +++ b/apps/analyzer/metadata_analyzer/size_alert.py @@ -9,7 +9,7 @@ def __init__(self, result, reference_size): def as_json(self): return { "backupId": self.uuid, - "backupSavesetName": self.backup_saveset, + "backupSaveset": self.backup_saveset, "size": self.size, "referenceSize": self.reference_size } diff --git a/apps/backend/src/app/alerting/alerting.service.ts b/apps/backend/src/app/alerting/alerting.service.ts index 8ca881f6..7d38f33a 100644 --- a/apps/backend/src/app/alerting/alerting.service.ts +++ b/apps/backend/src/app/alerting/alerting.service.ts @@ -125,7 +125,7 @@ export class AlertingService { ); if (!backup) { throw new NotFoundException( - `Backup with id ${createSizeAlertDto.backupSavesetName} not found` + `Backup with id ${createSizeAlertDto.backupSaveset} not found` ); } alert.backup = backup; diff --git a/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts b/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts index ecb00c67..94eaf756 100644 --- a/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts +++ b/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts @@ -12,7 +12,7 @@ export class CreateCreationDateAlertDto { description: 'Saveset name of the belonging backup', required: true, }) - backupSavesetName!: string; + backupSaveset!: string; @ApiProperty({ description: 'Date, the backup started', diff --git a/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts b/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts index 6efb8e84..02d1a4b6 100644 --- a/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts +++ b/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts @@ -12,7 +12,7 @@ export class CreateSizeAlertDto { description: 'Saveset name of the belonging backup', required: true, }) - backupSavesetName!: string; + backupSaveset!: string; @ApiProperty({ description: 'Size of the Backup, which is the reason for the alert', diff --git a/apps/backend/src/app/backupData/dto/createBackupData.dto.ts b/apps/backend/src/app/backupData/dto/createBackupData.dto.ts index 9cc1acc6..3c773090 100644 --- a/apps/backend/src/app/backupData/dto/createBackupData.dto.ts +++ b/apps/backend/src/app/backupData/dto/createBackupData.dto.ts @@ -20,7 +20,7 @@ export class CreateBackupDataDto { description: 'saveset name of the backup', required: true, }) - savesetName!: string; + saveset!: string; @ApiProperty({ description: 'Size of Backup in MB', diff --git a/apps/backend/src/app/backupData/entity/backupData.entity.ts b/apps/backend/src/app/backupData/entity/backupData.entity.ts index fc5f9cbc..0894b17b 100644 --- a/apps/backend/src/app/backupData/entity/backupData.entity.ts +++ b/apps/backend/src/app/backupData/entity/backupData.entity.ts @@ -17,7 +17,7 @@ export class BackupDataEntity { required: true, }) @Column() - savesetName!: string; + saveset!: string; @ApiProperty({ description: 'Size of Backup in MB', diff --git a/apps/backend/src/app/db-config.service.ts b/apps/backend/src/app/db-config.service.ts index 18cdb0f7..677ae5a3 100644 --- a/apps/backend/src/app/db-config.service.ts +++ b/apps/backend/src/app/db-config.service.ts @@ -22,7 +22,7 @@ import { TaskEntity } from './tasks/entity/task.entity'; import { Tasks1733397652480 } from './migrations/1733397652480-Tasks'; import { MailReceiverEntity } from './utils/mail/entity/MailReceiver.entity'; import { MailReceiver1733580333590 } from './migrations/1733580333590-MailReceiver'; -import { AddSavesetName1733754552133 } from './migrations/1733754552133-AddSavesetName'; +import { AddSaveset1733760846109 } from './migrations/1733760846109-AddSaveset'; /** * Used by NestJS to reach database. @@ -66,7 +66,7 @@ export class DbConfigService implements TypeOrmOptionsFactory { CreationDateAlert1733070019992, Tasks1733397652480, MailReceiver1733580333590, - AddSavesetName1733754552133, + AddSaveset1733760846109, ], logging: true, logger: 'debug' diff --git a/apps/backend/src/app/migrations/1733754552133-AddSavesetName.ts b/apps/backend/src/app/migrations/1733760846109-AddSaveset.ts similarity index 65% rename from apps/backend/src/app/migrations/1733754552133-AddSavesetName.ts rename to apps/backend/src/app/migrations/1733760846109-AddSaveset.ts index 310e47bc..62692716 100644 --- a/apps/backend/src/app/migrations/1733754552133-AddSavesetName.ts +++ b/apps/backend/src/app/migrations/1733760846109-AddSaveset.ts @@ -1,14 +1,14 @@ import { MigrationInterface, QueryRunner } from "typeorm"; -export class AddSavesetName1733754552133 implements MigrationInterface { - name = 'AddSavesetName1733754552133' +export class AddSaveset1733760846109 implements MigrationInterface { + name = 'AddSaveset1733760846109' public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "BackupData" ADD "savesetName" character varying NOT NULL`); + await queryRunner.query(`ALTER TABLE "BackupData" ADD "saveset" character varying NOT NULL`); } public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "BackupData" DROP COLUMN "savesetName"`); + await queryRunner.query(`ALTER TABLE "BackupData" DROP COLUMN "saveset"`); } } diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html index e8bac2d5..84bf3b10 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html @@ -89,7 +89,7 @@

All Backups:

- + Saveset @@ -181,7 +181,7 @@

All Backups:

We couldn't find any backups! {{ backup.id }} - {{ backup.savesetName }} + {{ backup.saveset }} {{ backup.sizeMB }} {{ backup.taskId?.displayName ?? '' }} {{ backup.creationDate | date }} diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts index 81c400d3..4835e657 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts @@ -20,13 +20,13 @@ describe('BackupsComponent', () => { id: '1', sizeMB: 500, creationDate: new Date(), - savesetName: '' + saveset: '' }, { id: '2', sizeMB: 750, creationDate: new Date(), - savesetName: '' + saveset: '' }, ], paginationData: { diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts index b4140843..cc40cc39 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts @@ -114,6 +114,7 @@ export class BackupsComponent implements AfterViewInit, OnDestroy, OnInit { combineLatest([ this.backupDateFilter.changes.pipe(startWith(null)), this.backupSizeFilter.changes.pipe(startWith(null)), + this.backupSavesetFilter.changes.pipe(startWith(null)), this.backupIdFilter.changes.pipe(startWith(null)), this.taskFilter.changes.pipe(startWith(null)), ]) diff --git a/apps/frontend/src/app/shared/types/backup.ts b/apps/frontend/src/app/shared/types/backup.ts index 2dcf683e..8d2945f4 100644 --- a/apps/frontend/src/app/shared/types/backup.ts +++ b/apps/frontend/src/app/shared/types/backup.ts @@ -1,6 +1,6 @@ export interface Backup { id: string; - savesetName: string; + saveset: string; sizeMB: number; creationDate: Date; taskId?: { From 5e7db32203ea814c0431722ff7cabd5771ff369e Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Mon, 9 Dec 2024 17:40:57 +0100 Subject: [PATCH 11/22] make sort and filter by saveset work Signed-off-by: engelharddirk --- apps/backend/src/app/backupData/backupData.service.ts | 10 ++++++++++ .../src/app/backupData/dto/backupDataFilter.dto.ts | 7 +++++++ .../app/backupData/dto/backupDataOrderOptions.dto.ts | 3 ++- .../backups/backups/backups.component.ts | 4 ++++ .../src/app/shared/types/backup-filter-type.ts | 1 + 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/apps/backend/src/app/backupData/backupData.service.ts b/apps/backend/src/app/backupData/backupData.service.ts index 4dafd6b2..ebc2b0fe 100644 --- a/apps/backend/src/app/backupData/backupData.service.ts +++ b/apps/backend/src/app/backupData/backupData.service.ts @@ -191,6 +191,11 @@ export class BackupDataService extends PaginationService { }; } + //Saveset search + if (backupDataFilterDto.saveset) { + where.saveset = ILike(`%${backupDataFilterDto.saveset}%`); + } + where.type = BackupType.FULL; return where; @@ -212,6 +217,11 @@ export class BackupDataService extends PaginationService { }, }; } + if( backupDataOrderOptionsDto.orderBy === BackupDataOrderByOptions.SAVESET) { + return { + saveset: backupDataOrderOptionsDto.sortOrder ?? SortOrder.DESC, + }; + } return { [backupDataOrderOptionsDto.orderBy ?? 'creationDate']: backupDataOrderOptionsDto.sortOrder ?? SortOrder.DESC, diff --git a/apps/backend/src/app/backupData/dto/backupDataFilter.dto.ts b/apps/backend/src/app/backupData/dto/backupDataFilter.dto.ts index 31e45954..f6d8cc96 100644 --- a/apps/backend/src/app/backupData/dto/backupDataFilter.dto.ts +++ b/apps/backend/src/app/backupData/dto/backupDataFilter.dto.ts @@ -53,4 +53,11 @@ export class BackupDataFilterDto { }) @IsOptional() taskName?: string; + + @ApiProperty({ + description: 'saveset', + required: false, + }) + @IsOptional() + saveset?: string; } diff --git a/apps/backend/src/app/backupData/dto/backupDataOrderOptions.dto.ts b/apps/backend/src/app/backupData/dto/backupDataOrderOptions.dto.ts index eca02762..016d5cd9 100644 --- a/apps/backend/src/app/backupData/dto/backupDataOrderOptions.dto.ts +++ b/apps/backend/src/app/backupData/dto/backupDataOrderOptions.dto.ts @@ -6,7 +6,8 @@ export enum BackupDataOrderByOptions { ID = 'id', SIZE = 'sizeMB', BACKUP_DATE = 'creationDate', - TASK_NAME = 'taskName' + TASK_NAME = 'taskName', + SAVESET = 'saveset', } export class BackupDataOrderOptionsDto { diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts index cc40cc39..1d8af473 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts @@ -182,6 +182,10 @@ export class BackupsComponent implements AfterViewInit, OnDestroy, OnInit { params.id = this.backupIdFilter.ranges.id; } + if(this.backupSavesetFilter.isActive()) { + params.saveset = this.backupSavesetFilter.ranges.saveset; + } + if (this.taskFilter.isActive()) { params.taskName = this.taskFilter.ranges.taskName; } diff --git a/apps/frontend/src/app/shared/types/backup-filter-type.ts b/apps/frontend/src/app/shared/types/backup-filter-type.ts index 4c1309d5..2a785cb1 100644 --- a/apps/frontend/src/app/shared/types/backup-filter-type.ts +++ b/apps/frontend/src/app/shared/types/backup-filter-type.ts @@ -10,4 +10,5 @@ export type BackupFilterParams = { id?: string | null; taskId?: string | null; taskName?: string | null; + saveset?: string | null; }; From 2ae350c00785c6dfa825504e9c37e9c47f4b2e11 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Mon, 9 Dec 2024 17:41:12 +0100 Subject: [PATCH 12/22] fix backend tests Signed-off-by: engelharddirk --- .../src/app/backupData/backupData.controller.spec.ts | 2 ++ .../src/app/backupData/backupData.service.spec.ts | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/backend/src/app/backupData/backupData.controller.spec.ts b/apps/backend/src/app/backupData/backupData.controller.spec.ts index 81376064..8d55e416 100644 --- a/apps/backend/src/app/backupData/backupData.controller.spec.ts +++ b/apps/backend/src/app/backupData/backupData.controller.spec.ts @@ -12,6 +12,7 @@ import { TaskEntity } from '../tasks/entity/task.entity'; const mockBackupDataEntity: BackupDataEntity = { id: '123e4567-e89b-12d3-a456-426614174062', sizeMB: 100, + saveset: 'backup-123', type: BackupType.FULL, creationDate: new Date('2023-12-30 00:00:00.000000'), }; @@ -60,6 +61,7 @@ describe('BackupDataController (e2e)', () => { it('/backupData (POST) should create new backup data entry', async () => { const createBackupDataDto: CreateBackupDataDto = { id: '1', + saveset: 'backup-1', sizeMB: 100, creationDate: new Date(), }; diff --git a/apps/backend/src/app/backupData/backupData.service.spec.ts b/apps/backend/src/app/backupData/backupData.service.spec.ts index 63bca35d..698f4573 100644 --- a/apps/backend/src/app/backupData/backupData.service.spec.ts +++ b/apps/backend/src/app/backupData/backupData.service.spec.ts @@ -15,6 +15,7 @@ import { TasksService } from '../tasks/tasks.service'; const mockBackupDataEntity: BackupDataEntity = { id: '123e4567-e89b-12d3-a456-426614174062', sizeMB: 100, + saveset: 'backup', type: BackupType.FULL, creationDate: new Date('2023-12-30 00:00:00.000000'), }; @@ -201,8 +202,8 @@ describe('BackupDataService', () => { describe('createBatched', () => { it('should create new backup data entities batched', async () => { const createBackupDataDtos: CreateBackupDataDto[] = [ - { id: '1', sizeMB: 100, creationDate: new Date() }, - { id: '2', sizeMB: 200, creationDate: new Date() }, + { id: '1', sizeMB: 100, creationDate: new Date(), saveset: 'backup' }, + { id: '2', sizeMB: 200, creationDate: new Date(), saveset: 'backup' }, ]; await service.createBatched(createBackupDataDtos); @@ -224,8 +225,8 @@ describe('BackupDataService', () => { describe('createBatched', () => { it('should create new backup data entities batched', async () => { const createBackupDataDtos: CreateBackupDataDto[] = [ - { id: '1', sizeMB: 100, creationDate: new Date() }, - { id: '2', sizeMB: 200, creationDate: new Date() }, + { id: '1', sizeMB: 100, creationDate: new Date(), saveset: 'backup' }, + { id: '2', sizeMB: 200, creationDate: new Date(), saveset: 'backup' }, ]; await service.createBatched(createBackupDataDtos); From 4a23d447db29d849c96420ed83970043a1a5361b Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Mon, 9 Dec 2024 17:45:07 +0100 Subject: [PATCH 13/22] use saveset in alert frontend Signed-off-by: engelharddirk --- apps/frontend/src/app/alert/component/alert.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/frontend/src/app/alert/component/alert.component.html b/apps/frontend/src/app/alert/component/alert.component.html index a5e1ef2f..25dfe242 100644 --- a/apps/frontend/src/app/alert/component/alert.component.html +++ b/apps/frontend/src/app/alert/component/alert.component.html @@ -30,8 +30,8 @@ {{ getAlertReason(alert) }} - Backup ID: - {{ alert.backup.id }} + Backup Saveset: + {{ alert.backup.saveset }}
Creation Date: {{ formatDate(alert.backup.creationDate) }} From d49706f0c66cdbfbd1ead1ce90e808ea9744fd3b Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Tue, 10 Dec 2024 10:59:58 +0100 Subject: [PATCH 14/22] fix alert bug created in the process Signed-off-by: engelharddirk --- apps/analyzer/metadata_analyzer/analyzer.py | 1 - apps/backend/src/app/alerting/alerting.service.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/analyzer/metadata_analyzer/analyzer.py b/apps/analyzer/metadata_analyzer/analyzer.py index 205eee5a..e4ab73d3 100644 --- a/apps/analyzer/metadata_analyzer/analyzer.py +++ b/apps/analyzer/metadata_analyzer/analyzer.py @@ -21,7 +21,6 @@ def analyze(): # Convert a result from the database into the format used by the backend def _convert_result(result): - print(result.saveset) backup_type = { "F": "FULL", "I": "INCREMENTAL", diff --git a/apps/backend/src/app/alerting/alerting.service.ts b/apps/backend/src/app/alerting/alerting.service.ts index 7d38f33a..ac7c9b48 100644 --- a/apps/backend/src/app/alerting/alerting.service.ts +++ b/apps/backend/src/app/alerting/alerting.service.ts @@ -125,7 +125,7 @@ export class AlertingService { ); if (!backup) { throw new NotFoundException( - `Backup with id ${createSizeAlertDto.backupSaveset} not found` + `Backup with id ${createSizeAlertDto.backupUuid} not found` ); } alert.backup = backup; From 653b752e43f62d2f4d39d4a94502f39ff00d294c Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Tue, 10 Dec 2024 11:04:27 +0100 Subject: [PATCH 15/22] adapt some more frontend tests Signed-off-by: engelharddirk --- .../alert/component/alert.component.spec.ts | 45 +++++++++++++++---- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/apps/frontend/src/app/alert/component/alert.component.spec.ts b/apps/frontend/src/app/alert/component/alert.component.spec.ts index 0d0bcf59..5fce06e1 100644 --- a/apps/frontend/src/app/alert/component/alert.component.spec.ts +++ b/apps/frontend/src/app/alert/component/alert.component.spec.ts @@ -44,7 +44,10 @@ describe('AlertComponent', () => { user_active: false, master_active: false }, - backup: { id: randomUUID().toString(), sizeMB: 0, creationDate: new Date() }, + backup: { + id: randomUUID().toString(), sizeMB: 0, creationDate: new Date(), + saveset: 'saveset' + }, }, { id: randomUUID().toString(), @@ -54,7 +57,10 @@ describe('AlertComponent', () => { user_active: false, master_active: false }, - backup: { id: randomUUID().toString(), sizeMB: 0, creationDate: new Date() }, + backup: { + id: randomUUID().toString(), sizeMB: 0, creationDate: new Date(), + saveset: 'saveset' + }, }, { id: randomUUID().toString(), @@ -64,7 +70,10 @@ describe('AlertComponent', () => { user_active: false, master_active: false }, - backup: { id: randomUUID().toString(), sizeMB: 0, creationDate: new Date() }, + backup: { + id: randomUUID().toString(), sizeMB: 0, creationDate: new Date(), + saveset: 'saveset' + }, }, ]; @@ -104,7 +113,10 @@ describe('AlertComponent', () => { user_active: false, master_active: false }, - backup: { id: randomUUID().toString(), sizeMB: 0, creationDate: new Date() }, + backup: { + id: randomUUID().toString(), sizeMB: 0, creationDate: new Date(), + saveset: 'saveset' + }, }, ]; expect(component.getStatus()).toBe('Critical'); @@ -120,7 +132,10 @@ describe('AlertComponent', () => { user_active: false, master_active: false }, - backup: { id: randomUUID().toString(), sizeMB: 0, creationDate: new Date() }, + backup: { + id: randomUUID().toString(), sizeMB: 0, creationDate: new Date(), + saveset: 'saveset' + }, }, ]; expect(component.getStatus()).toBe('Warning'); @@ -151,7 +166,10 @@ describe('AlertComponent', () => { user_active: false, master_active: false }, - backup: { id: randomUUID().toString(), sizeMB: 0, creationDate: new Date() }, + backup: { + id: randomUUID().toString(), sizeMB: 0, creationDate: new Date(), + saveset: 'saveset' + }, }; const nonCriticalAlert: Alert = { @@ -162,7 +180,10 @@ describe('AlertComponent', () => { user_active: false, master_active: false }, - backup: { id: randomUUID().toString(), sizeMB: 0, creationDate: new Date() }, + backup: { + id: randomUUID().toString(), sizeMB: 0, creationDate: new Date(), + saveset: 'saveset' + }, }; expect(component.getAlertClass(criticalAlert)).toBe('alert-red'); @@ -180,7 +201,10 @@ describe('AlertComponent', () => { user_active: false, master_active: false }, - backup: { id: randomUUID().toString(), sizeMB: 20, creationDate: new Date() }, + backup: { + id: randomUUID().toString(), sizeMB: 20, creationDate: new Date(), + saveset: 'saveset' + }, size: 20, referenceSize: 100 }; @@ -197,7 +221,10 @@ describe('AlertComponent', () => { user_active: false, master_active: false }, - backup: { id: randomUUID().toString(), sizeMB: 100, creationDate: new Date() }, + backup: { + id: randomUUID().toString(), sizeMB: 100, creationDate: new Date(), + saveset: 'saveset' + }, size: 100, referenceSize: 20 }; From 7074fa23b358f641943bf2b2f7f59e29e1dbd2a8 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Tue, 10 Dec 2024 11:07:19 +0100 Subject: [PATCH 16/22] remove uuid from frontend Signed-off-by: engelharddirk --- .../backups/backups/backups.component.html | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html index 84bf3b10..4d05f1f4 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.html @@ -72,22 +72,6 @@

All Backups:

(clrDgRefresh)="refresh($event)" [clrDgLoading]="loading" > - - - Backup ID - - - - - - - - @@ -180,7 +164,6 @@

All Backups:

We couldn't find any backups! - {{ backup.id }} {{ backup.saveset }} {{ backup.sizeMB }} {{ backup.taskId?.displayName ?? '' }} From 7d27c5e8fddb9bde197e74eb810d21b99a6e19ff Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Tue, 10 Dec 2024 11:12:57 +0100 Subject: [PATCH 17/22] some dev merge adjustments Signed-off-by: engelharddirk --- .../backups/backups/backups.component.ts | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts index 327d7df0..83c13323 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts @@ -53,6 +53,7 @@ export class BackupsComponent implements AfterViewInit, OnDestroy, OnInit { protected backupIdFilter: CustomFilter; protected selectedTask: BackupTask[] = []; protected filterPanel: boolean = false; + protected backupSavesetFilter: CustomFilter; taskFilter: CustomFilter; //Subjects @@ -65,17 +66,6 @@ export class BackupsComponent implements AfterViewInit, OnDestroy, OnInit { map((config) => config.range) ); - loading = false; - pageSize = 10; - backupSizeFilter: CustomFilter; - backupDateFilter: CustomFilter; - backupIdFilter: CustomFilter; - backupSavesetFilter: CustomFilter; - taskFilter: CustomFilter; - - readonly backups$: Observable>; - readonly chartBackups$: Observable>; - protected backupTaskSearchTerm$: Subject = new Subject(); private readonly backupTaskSubject$ = new BehaviorSubject([]); From 802226afbd5369c03aa9d3e2115b2cd5dda9f3a1 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Tue, 10 Dec 2024 11:18:29 +0100 Subject: [PATCH 18/22] fix poetry lock Signed-off-by: engelharddirk --- apps/analyzer/poetry.lock | 434 ++++++++++++++++++++++++-------------- 1 file changed, 271 insertions(+), 163 deletions(-) diff --git a/apps/analyzer/poetry.lock b/apps/analyzer/poetry.lock index e66d351c..6a26de80 100644 --- a/apps/analyzer/poetry.lock +++ b/apps/analyzer/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. [[package]] name = "asn1crypto" @@ -208,73 +208,73 @@ files = [ [[package]] name = "coverage" -version = "7.6.7" +version = "7.6.9" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" files = [ - {file = "coverage-7.6.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:108bb458827765d538abcbf8288599fee07d2743357bdd9b9dad456c287e121e"}, - {file = "coverage-7.6.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c973b2fe4dc445cb865ab369df7521df9c27bf40715c837a113edaa2aa9faf45"}, - {file = "coverage-7.6.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c6b24007c4bcd0b19fac25763a7cac5035c735ae017e9a349b927cfc88f31c1"}, - {file = "coverage-7.6.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acbb8af78f8f91b3b51f58f288c0994ba63c646bc1a8a22ad072e4e7e0a49f1c"}, - {file = "coverage-7.6.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad32a981bcdedb8d2ace03b05e4fd8dace8901eec64a532b00b15217d3677dd2"}, - {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:34d23e28ccb26236718a3a78ba72744212aa383141961dd6825f6595005c8b06"}, - {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e25bacb53a8c7325e34d45dddd2f2fbae0dbc230d0e2642e264a64e17322a777"}, - {file = "coverage-7.6.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af05bbba896c4472a29408455fe31b3797b4d8648ed0a2ccac03e074a77e2314"}, - {file = "coverage-7.6.7-cp310-cp310-win32.whl", hash = "sha256:796c9b107d11d2d69e1849b2dfe41730134b526a49d3acb98ca02f4985eeff7a"}, - {file = "coverage-7.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:987a8e3da7da4eed10a20491cf790589a8e5e07656b6dc22d3814c4d88faf163"}, - {file = "coverage-7.6.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7e61b0e77ff4dddebb35a0e8bb5a68bf0f8b872407d8d9f0c726b65dfabe2469"}, - {file = "coverage-7.6.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1a5407a75ca4abc20d6252efeb238377a71ce7bda849c26c7a9bece8680a5d99"}, - {file = "coverage-7.6.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df002e59f2d29e889c37abd0b9ee0d0e6e38c24f5f55d71ff0e09e3412a340ec"}, - {file = "coverage-7.6.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:673184b3156cba06154825f25af33baa2671ddae6343f23175764e65a8c4c30b"}, - {file = "coverage-7.6.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e69ad502f1a2243f739f5bd60565d14a278be58be4c137d90799f2c263e7049a"}, - {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60dcf7605c50ea72a14490d0756daffef77a5be15ed1b9fea468b1c7bda1bc3b"}, - {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9c2eb378bebb2c8f65befcb5147877fc1c9fbc640fc0aad3add759b5df79d55d"}, - {file = "coverage-7.6.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c0317288f032221d35fa4cbc35d9f4923ff0dfd176c79c9b356e8ef8ef2dff4"}, - {file = "coverage-7.6.7-cp311-cp311-win32.whl", hash = "sha256:951aade8297358f3618a6e0660dc74f6b52233c42089d28525749fc8267dccd2"}, - {file = "coverage-7.6.7-cp311-cp311-win_amd64.whl", hash = "sha256:5e444b8e88339a2a67ce07d41faabb1d60d1004820cee5a2c2b54e2d8e429a0f"}, - {file = "coverage-7.6.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f07ff574986bc3edb80e2c36391678a271d555f91fd1d332a1e0f4b5ea4b6ea9"}, - {file = "coverage-7.6.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:49ed5ee4109258973630c1f9d099c7e72c5c36605029f3a91fe9982c6076c82b"}, - {file = "coverage-7.6.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3e8796434a8106b3ac025fd15417315d7a58ee3e600ad4dbcfddc3f4b14342c"}, - {file = "coverage-7.6.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3b925300484a3294d1c70f6b2b810d6526f2929de954e5b6be2bf8caa1f12c1"}, - {file = "coverage-7.6.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c42ec2c522e3ddd683dec5cdce8e62817afb648caedad9da725001fa530d354"}, - {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0266b62cbea568bd5e93a4da364d05de422110cbed5056d69339bd5af5685433"}, - {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e5f2a0f161d126ccc7038f1f3029184dbdf8f018230af17ef6fd6a707a5b881f"}, - {file = "coverage-7.6.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c132b5a22821f9b143f87446805e13580b67c670a548b96da945a8f6b4f2efbb"}, - {file = "coverage-7.6.7-cp312-cp312-win32.whl", hash = "sha256:7c07de0d2a110f02af30883cd7dddbe704887617d5c27cf373362667445a4c76"}, - {file = "coverage-7.6.7-cp312-cp312-win_amd64.whl", hash = "sha256:fd49c01e5057a451c30c9b892948976f5d38f2cbd04dc556a82743ba8e27ed8c"}, - {file = "coverage-7.6.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:46f21663e358beae6b368429ffadf14ed0a329996248a847a4322fb2e35d64d3"}, - {file = "coverage-7.6.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:40cca284c7c310d622a1677f105e8507441d1bb7c226f41978ba7c86979609ab"}, - {file = "coverage-7.6.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77256ad2345c29fe59ae861aa11cfc74579c88d4e8dbf121cbe46b8e32aec808"}, - {file = "coverage-7.6.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87ea64b9fa52bf395272e54020537990a28078478167ade6c61da7ac04dc14bc"}, - {file = "coverage-7.6.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d608a7808793e3615e54e9267519351c3ae204a6d85764d8337bd95993581a8"}, - {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdd94501d65adc5c24f8a1a0eda110452ba62b3f4aeaba01e021c1ed9cb8f34a"}, - {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:82c809a62e953867cf57e0548c2b8464207f5f3a6ff0e1e961683e79b89f2c55"}, - {file = "coverage-7.6.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb684694e99d0b791a43e9fc0fa58efc15ec357ac48d25b619f207c41f2fd384"}, - {file = "coverage-7.6.7-cp313-cp313-win32.whl", hash = "sha256:963e4a08cbb0af6623e61492c0ec4c0ec5c5cf74db5f6564f98248d27ee57d30"}, - {file = "coverage-7.6.7-cp313-cp313-win_amd64.whl", hash = "sha256:14045b8bfd5909196a90da145a37f9d335a5d988a83db34e80f41e965fb7cb42"}, - {file = "coverage-7.6.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f2c7a045eef561e9544359a0bf5784b44e55cefc7261a20e730baa9220c83413"}, - {file = "coverage-7.6.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5dd4e4a49d9c72a38d18d641135d2fb0bdf7b726ca60a103836b3d00a1182acd"}, - {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c95e0fa3d1547cb6f021ab72f5c23402da2358beec0a8e6d19a368bd7b0fb37"}, - {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f63e21ed474edd23f7501f89b53280014436e383a14b9bd77a648366c81dce7b"}, - {file = "coverage-7.6.7-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ead9b9605c54d15be228687552916c89c9683c215370c4a44f1f217d2adcc34d"}, - {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0573f5cbf39114270842d01872952d301027d2d6e2d84013f30966313cadb529"}, - {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:e2c8e3384c12dfa19fa9a52f23eb091a8fad93b5b81a41b14c17c78e23dd1d8b"}, - {file = "coverage-7.6.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:70a56a2ec1869e6e9fa69ef6b76b1a8a7ef709972b9cc473f9ce9d26b5997ce3"}, - {file = "coverage-7.6.7-cp313-cp313t-win32.whl", hash = "sha256:dbba8210f5067398b2c4d96b4e64d8fb943644d5eb70be0d989067c8ca40c0f8"}, - {file = "coverage-7.6.7-cp313-cp313t-win_amd64.whl", hash = "sha256:dfd14bcae0c94004baba5184d1c935ae0d1231b8409eb6c103a5fd75e8ecdc56"}, - {file = "coverage-7.6.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37a15573f988b67f7348916077c6d8ad43adb75e478d0910957394df397d2874"}, - {file = "coverage-7.6.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b6cce5c76985f81da3769c52203ee94722cd5d5889731cd70d31fee939b74bf0"}, - {file = "coverage-7.6.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ab9763d291a17b527ac6fd11d1a9a9c358280adb320e9c2672a97af346ac2c"}, - {file = "coverage-7.6.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6cf96ceaa275f071f1bea3067f8fd43bec184a25a962c754024c973af871e1b7"}, - {file = "coverage-7.6.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aee9cf6b0134d6f932d219ce253ef0e624f4fa588ee64830fcba193269e4daa3"}, - {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2bc3e45c16564cc72de09e37413262b9f99167803e5e48c6156bccdfb22c8327"}, - {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:623e6965dcf4e28a3debaa6fcf4b99ee06d27218f46d43befe4db1c70841551c"}, - {file = "coverage-7.6.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:850cfd2d6fc26f8346f422920ac204e1d28814e32e3a58c19c91980fa74d8289"}, - {file = "coverage-7.6.7-cp39-cp39-win32.whl", hash = "sha256:c296263093f099da4f51b3dff1eff5d4959b527d4f2f419e16508c5da9e15e8c"}, - {file = "coverage-7.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:90746521206c88bdb305a4bf3342b1b7316ab80f804d40c536fc7d329301ee13"}, - {file = "coverage-7.6.7-pp39.pp310-none-any.whl", hash = "sha256:0ddcb70b3a3a57581b450571b31cb774f23eb9519c2aaa6176d3a84c9fc57671"}, - {file = "coverage-7.6.7.tar.gz", hash = "sha256:d79d4826e41441c9a118ff045e4bccb9fdbdcb1d02413e7ea6eb5c87b5439d24"}, + {file = "coverage-7.6.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85d9636f72e8991a1706b2b55b06c27545448baf9f6dbf51c4004609aacd7dcb"}, + {file = "coverage-7.6.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:608a7fd78c67bee8936378299a6cb9f5149bb80238c7a566fc3e6717a4e68710"}, + {file = "coverage-7.6.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96d636c77af18b5cb664ddf12dab9b15a0cfe9c0bde715da38698c8cea748bfa"}, + {file = "coverage-7.6.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75cded8a3cff93da9edc31446872d2997e327921d8eed86641efafd350e1df1"}, + {file = "coverage-7.6.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7b15f589593110ae767ce997775d645b47e5cbbf54fd322f8ebea6277466cec"}, + {file = "coverage-7.6.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:44349150f6811b44b25574839b39ae35291f6496eb795b7366fef3bd3cf112d3"}, + {file = "coverage-7.6.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d891c136b5b310d0e702e186d70cd16d1119ea8927347045124cb286b29297e5"}, + {file = "coverage-7.6.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:db1dab894cc139f67822a92910466531de5ea6034ddfd2b11c0d4c6257168073"}, + {file = "coverage-7.6.9-cp310-cp310-win32.whl", hash = "sha256:41ff7b0da5af71a51b53f501a3bac65fb0ec311ebed1632e58fc6107f03b9198"}, + {file = "coverage-7.6.9-cp310-cp310-win_amd64.whl", hash = "sha256:35371f8438028fdccfaf3570b31d98e8d9eda8bb1d6ab9473f5a390969e98717"}, + {file = "coverage-7.6.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:932fc826442132dde42ee52cf66d941f581c685a6313feebed358411238f60f9"}, + {file = "coverage-7.6.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:085161be5f3b30fd9b3e7b9a8c301f935c8313dcf928a07b116324abea2c1c2c"}, + {file = "coverage-7.6.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccc660a77e1c2bf24ddbce969af9447a9474790160cfb23de6be4fa88e3951c7"}, + {file = "coverage-7.6.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c69e42c892c018cd3c8d90da61d845f50a8243062b19d228189b0224150018a9"}, + {file = "coverage-7.6.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0824a28ec542a0be22f60c6ac36d679e0e262e5353203bea81d44ee81fe9c6d4"}, + {file = "coverage-7.6.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4401ae5fc52ad8d26d2a5d8a7428b0f0c72431683f8e63e42e70606374c311a1"}, + {file = "coverage-7.6.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98caba4476a6c8d59ec1eb00c7dd862ba9beca34085642d46ed503cc2d440d4b"}, + {file = "coverage-7.6.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ee5defd1733fd6ec08b168bd4f5387d5b322f45ca9e0e6c817ea6c4cd36313e3"}, + {file = "coverage-7.6.9-cp311-cp311-win32.whl", hash = "sha256:f2d1ec60d6d256bdf298cb86b78dd715980828f50c46701abc3b0a2b3f8a0dc0"}, + {file = "coverage-7.6.9-cp311-cp311-win_amd64.whl", hash = "sha256:0d59fd927b1f04de57a2ba0137166d31c1a6dd9e764ad4af552912d70428c92b"}, + {file = "coverage-7.6.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:99e266ae0b5d15f1ca8d278a668df6f51cc4b854513daab5cae695ed7b721cf8"}, + {file = "coverage-7.6.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9901d36492009a0a9b94b20e52ebfc8453bf49bb2b27bca2c9706f8b4f5a554a"}, + {file = "coverage-7.6.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abd3e72dd5b97e3af4246cdada7738ef0e608168de952b837b8dd7e90341f015"}, + {file = "coverage-7.6.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff74026a461eb0660366fb01c650c1d00f833a086b336bdad7ab00cc952072b3"}, + {file = "coverage-7.6.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65dad5a248823a4996724a88eb51d4b31587aa7aa428562dbe459c684e5787ae"}, + {file = "coverage-7.6.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:22be16571504c9ccea919fcedb459d5ab20d41172056206eb2994e2ff06118a4"}, + {file = "coverage-7.6.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f957943bc718b87144ecaee70762bc2bc3f1a7a53c7b861103546d3a403f0a6"}, + {file = "coverage-7.6.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ae1387db4aecb1f485fb70a6c0148c6cdaebb6038f1d40089b1fc84a5db556f"}, + {file = "coverage-7.6.9-cp312-cp312-win32.whl", hash = "sha256:1a330812d9cc7ac2182586f6d41b4d0fadf9be9049f350e0efb275c8ee8eb692"}, + {file = "coverage-7.6.9-cp312-cp312-win_amd64.whl", hash = "sha256:b12c6b18269ca471eedd41c1b6a1065b2f7827508edb9a7ed5555e9a56dcfc97"}, + {file = "coverage-7.6.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:899b8cd4781c400454f2f64f7776a5d87bbd7b3e7f7bda0cb18f857bb1334664"}, + {file = "coverage-7.6.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:61f70dc68bd36810972e55bbbe83674ea073dd1dcc121040a08cdf3416c5349c"}, + {file = "coverage-7.6.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a289d23d4c46f1a82d5db4abeb40b9b5be91731ee19a379d15790e53031c014"}, + {file = "coverage-7.6.9-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e216d8044a356fc0337c7a2a0536d6de07888d7bcda76febcb8adc50bdbbd00"}, + {file = "coverage-7.6.9-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c026eb44f744acaa2bda7493dad903aa5bf5fc4f2554293a798d5606710055d"}, + {file = "coverage-7.6.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77363e8425325384f9d49272c54045bbed2f478e9dd698dbc65dbc37860eb0a"}, + {file = "coverage-7.6.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:777abfab476cf83b5177b84d7486497e034eb9eaea0d746ce0c1268c71652077"}, + {file = "coverage-7.6.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:447af20e25fdbe16f26e84eb714ba21d98868705cb138252d28bc400381f6ffb"}, + {file = "coverage-7.6.9-cp313-cp313-win32.whl", hash = "sha256:d872ec5aeb086cbea771c573600d47944eea2dcba8be5f3ee649bfe3cb8dc9ba"}, + {file = "coverage-7.6.9-cp313-cp313-win_amd64.whl", hash = "sha256:fd1213c86e48dfdc5a0cc676551db467495a95a662d2396ecd58e719191446e1"}, + {file = "coverage-7.6.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ba9e7484d286cd5a43744e5f47b0b3fb457865baf07bafc6bee91896364e1419"}, + {file = "coverage-7.6.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e5ea1cf0872ee455c03e5674b5bca5e3e68e159379c1af0903e89f5eba9ccc3a"}, + {file = "coverage-7.6.9-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d10e07aa2b91835d6abec555ec8b2733347956991901eea6ffac295f83a30e4"}, + {file = "coverage-7.6.9-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13a9e2d3ee855db3dd6ea1ba5203316a1b1fd8eaeffc37c5b54987e61e4194ae"}, + {file = "coverage-7.6.9-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c38bf15a40ccf5619fa2fe8f26106c7e8e080d7760aeccb3722664c8656b030"}, + {file = "coverage-7.6.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d5275455b3e4627c8e7154feaf7ee0743c2e7af82f6e3b561967b1cca755a0be"}, + {file = "coverage-7.6.9-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8f8770dfc6e2c6a2d4569f411015c8d751c980d17a14b0530da2d7f27ffdd88e"}, + {file = "coverage-7.6.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8d2dfa71665a29b153a9681edb1c8d9c1ea50dfc2375fb4dac99ea7e21a0bcd9"}, + {file = "coverage-7.6.9-cp313-cp313t-win32.whl", hash = "sha256:5e6b86b5847a016d0fbd31ffe1001b63355ed309651851295315031ea7eb5a9b"}, + {file = "coverage-7.6.9-cp313-cp313t-win_amd64.whl", hash = "sha256:97ddc94d46088304772d21b060041c97fc16bdda13c6c7f9d8fcd8d5ae0d8611"}, + {file = "coverage-7.6.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:adb697c0bd35100dc690de83154627fbab1f4f3c0386df266dded865fc50a902"}, + {file = "coverage-7.6.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:be57b6d56e49c2739cdf776839a92330e933dd5e5d929966fbbd380c77f060be"}, + {file = "coverage-7.6.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1592791f8204ae9166de22ba7e6705fa4ebd02936c09436a1bb85aabca3e599"}, + {file = "coverage-7.6.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e12ae8cc979cf83d258acb5e1f1cf2f3f83524d1564a49d20b8bec14b637f08"}, + {file = "coverage-7.6.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb5555cff66c4d3d6213a296b360f9e1a8e323e74e0426b6c10ed7f4d021e464"}, + {file = "coverage-7.6.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b9389a429e0e5142e69d5bf4a435dd688c14478a19bb901735cdf75e57b13845"}, + {file = "coverage-7.6.9-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:592ac539812e9b46046620341498caf09ca21023c41c893e1eb9dbda00a70cbf"}, + {file = "coverage-7.6.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a27801adef24cc30871da98a105f77995e13a25a505a0161911f6aafbd66e678"}, + {file = "coverage-7.6.9-cp39-cp39-win32.whl", hash = "sha256:8e3c3e38930cfb729cb8137d7f055e5a473ddaf1217966aa6238c88bd9fd50e6"}, + {file = "coverage-7.6.9-cp39-cp39-win_amd64.whl", hash = "sha256:e28bf44afa2b187cc9f41749138a64435bf340adfcacb5b2290c070ce99839d4"}, + {file = "coverage-7.6.9-pp39.pp310-none-any.whl", hash = "sha256:f3ca78518bc6bc92828cd11867b121891d75cae4ea9e908d72030609b996db1b"}, + {file = "coverage-7.6.9.tar.gz", hash = "sha256:4a8d8977b0c6ef5aeadcb644da9e69ae0dcfe66ec7f368c89c72e058bd71164d"}, ] [package.dependencies] @@ -643,6 +643,70 @@ files = [ {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, ] +[[package]] +name = "mypy" +version = "1.13.0" +description = "Optional static typing for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, + {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, + {file = "mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7"}, + {file = "mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f"}, + {file = "mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d"}, + {file = "mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d"}, + {file = "mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b"}, + {file = "mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73"}, + {file = "mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5"}, + {file = "mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e"}, + {file = "mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2"}, + {file = "mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0"}, + {file = "mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7"}, + {file = "mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62"}, + {file = "mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8"}, + {file = "mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7"}, + {file = "mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:100fac22ce82925f676a734af0db922ecfea991e1d7ec0ceb1e115ebe501301a"}, + {file = "mypy-1.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7bcb0bb7f42a978bb323a7c88f1081d1b5dee77ca86f4100735a6f541299d8fb"}, + {file = "mypy-1.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bde31fc887c213e223bbfc34328070996061b0833b0a4cfec53745ed61f3519b"}, + {file = "mypy-1.13.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07de989f89786f62b937851295ed62e51774722e5444a27cecca993fc3f9cd74"}, + {file = "mypy-1.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:4bde84334fbe19bad704b3f5b78c4abd35ff1026f8ba72b29de70dda0916beb6"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0246bcb1b5de7f08f2826451abd947bf656945209b140d16ed317f65a17dc7dc"}, + {file = "mypy-1.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7f5b7deae912cf8b77e990b9280f170381fdfbddf61b4ef80927edd813163732"}, + {file = "mypy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7029881ec6ffb8bc233a4fa364736789582c738217b133f1b55967115288a2bc"}, + {file = "mypy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3e38b980e5681f28f033f3be86b099a247b13c491f14bb8b1e1e134d23bb599d"}, + {file = "mypy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:a6789be98a2017c912ae6ccb77ea553bbaf13d27605d2ca20a76dfbced631b24"}, + {file = "mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a"}, + {file = "mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=4.6.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +faster-cache = ["orjson"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + [[package]] name = "packaging" version = "24.2" @@ -937,101 +1001,114 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "rpds-py" -version = "0.21.0" +version = "0.22.3" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" files = [ - {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"}, - {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"}, - {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"}, - {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"}, - {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"}, - {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"}, - {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"}, - {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"}, - {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"}, - {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"}, - {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"}, - {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"}, - {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"}, - {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"}, - {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"}, - {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"}, - {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"}, - {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"}, - {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"}, - {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"}, - {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf"}, + {file = "rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652"}, + {file = "rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a"}, + {file = "rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64"}, + {file = "rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7"}, + {file = "rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627"}, + {file = "rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f"}, + {file = "rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de"}, + {file = "rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520"}, + {file = "rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9"}, + {file = "rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, + {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, ] [[package]] @@ -1050,13 +1127,13 @@ asn1crypto = ">=1.5.1" [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] @@ -1127,6 +1204,7 @@ files = [ [package.dependencies] greenlet = {version = "!=0.4.17", markers = "python_version < \"3.13\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +mypy = {version = ">=0.910", optional = true, markers = "extra == \"mypy\""} typing-extensions = ">=4.6.0" [package.extras] @@ -1170,13 +1248,43 @@ tests = ["pytest", "pytest-cov"] [[package]] name = "tomli" -version = "2.1.0" +version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, - {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] @@ -1246,4 +1354,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "88b636a5913d1c6088717324e54e1d780d46b10cadf12b0ef1e99c1983444832" +content-hash = "ca5d9cf6ab857c0cbe20a10db6c662c7cf65ed072e57f49409515a71c3030cda" From f426c908777a2f74d1af106668fdda7a46fe8c45 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Tue, 10 Dec 2024 11:40:33 +0100 Subject: [PATCH 19/22] review changes Signed-off-by: engelharddirk --- .../metadata_analyzer/creation_date_alert.py | 2 -- apps/analyzer/metadata_analyzer/size_alert.py | 1 - .../backend/src/app/backupData/backupData.service.ts | 5 ----- .../src/app/alert/component/alert.component.html | 3 --- .../backups/backups/backups.component.spec.ts | 12 ++++++------ .../backups/backups/backups.component.ts | 7 ------- 6 files changed, 6 insertions(+), 24 deletions(-) diff --git a/apps/analyzer/metadata_analyzer/creation_date_alert.py b/apps/analyzer/metadata_analyzer/creation_date_alert.py index 97e9326a..ea3aa658 100644 --- a/apps/analyzer/metadata_analyzer/creation_date_alert.py +++ b/apps/analyzer/metadata_analyzer/creation_date_alert.py @@ -1,14 +1,12 @@ class CreationDateAlert: def __init__(self, result, reference_date): self.backup_uuid = result.uuid - self.backup_saveset = result.saveset self.date = result.start_time self.reference_date = reference_date def as_json(self): return { "backupId": self.backup_uuid, - "backupSaveset": self.backup_saveset, "date": self.date.isoformat(), "referenceDate": self.reference_date.isoformat() } diff --git a/apps/analyzer/metadata_analyzer/size_alert.py b/apps/analyzer/metadata_analyzer/size_alert.py index 382f8223..c591127f 100644 --- a/apps/analyzer/metadata_analyzer/size_alert.py +++ b/apps/analyzer/metadata_analyzer/size_alert.py @@ -9,7 +9,6 @@ def __init__(self, result, reference_size): def as_json(self): return { "backupId": self.uuid, - "backupSaveset": self.backup_saveset, "size": self.size, "referenceSize": self.reference_size } diff --git a/apps/backend/src/app/backupData/backupData.service.ts b/apps/backend/src/app/backupData/backupData.service.ts index ebc2b0fe..2763a038 100644 --- a/apps/backend/src/app/backupData/backupData.service.ts +++ b/apps/backend/src/app/backupData/backupData.service.ts @@ -217,11 +217,6 @@ export class BackupDataService extends PaginationService { }, }; } - if( backupDataOrderOptionsDto.orderBy === BackupDataOrderByOptions.SAVESET) { - return { - saveset: backupDataOrderOptionsDto.sortOrder ?? SortOrder.DESC, - }; - } return { [backupDataOrderOptionsDto.orderBy ?? 'creationDate']: backupDataOrderOptionsDto.sortOrder ?? SortOrder.DESC, diff --git a/apps/frontend/src/app/alert/component/alert.component.html b/apps/frontend/src/app/alert/component/alert.component.html index b3d07e4f..38a306b9 100644 --- a/apps/frontend/src/app/alert/component/alert.component.html +++ b/apps/frontend/src/app/alert/component/alert.component.html @@ -43,9 +43,6 @@ Backup Saveset: {{ alert.backup.saveset }}
- Backup ID: - {{ alert.backup.id }} -
Creation Date: {{ formatDate(alert.backup.creationDate) }}
diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts index 573e8675..ca689410 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.spec.ts @@ -166,23 +166,23 @@ describe('BackupsComponent', () => { }); it('should build filter params with active id filter', () => { - const idFilter = new CustomFilter('id'); - idFilter.ranges = { + const savesetFilter = new CustomFilter('saveset'); + savesetFilter.ranges = { fromDate: null, toDate: null, fromSizeMB: null, - saveset: null, + saveset: "saveset", toSizeMB: null, id: '000d88', taskName: null, }; - (idFilter.ranges as any)['_isActive'] = true; + (savesetFilter.ranges as any)['_isActive'] = true; - component['backupIdFilter'] = idFilter; + component['backupSavesetFilter'] = savesetFilter; const params = component['buildFilterParams'](); - expect(params.id).toBe(idFilter.ranges.id); + expect(params.saveset).toBe(savesetFilter.ranges.saveset); }); it('should build filter params with active task filter', () => { diff --git a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts index 83c13323..f1d15938 100644 --- a/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts +++ b/apps/frontend/src/app/backups-overview/backups/backups/backups.component.ts @@ -50,7 +50,6 @@ export class BackupsComponent implements AfterViewInit, OnDestroy, OnInit { pageSize = 10; protected backupSizeFilter: CustomFilter; protected backupDateFilter: CustomFilter; - protected backupIdFilter: CustomFilter; protected selectedTask: BackupTask[] = []; protected filterPanel: boolean = false; protected backupSavesetFilter: CustomFilter; @@ -87,7 +86,6 @@ export class BackupsComponent implements AfterViewInit, OnDestroy, OnInit { this.backupSizeFilter = new CustomFilter('size'); this.backupDateFilter = new CustomFilter('date'); this.backupSavesetFilter = new CustomFilter('saveset'); - this.backupIdFilter = new CustomFilter('id'); this.taskFilter = new CustomFilter('taskName'); /** @@ -190,7 +188,6 @@ export class BackupsComponent implements AfterViewInit, OnDestroy, OnInit { this.backupDateFilter.changes.pipe(startWith(null)), this.backupSizeFilter.changes.pipe(startWith(null)), this.backupSavesetFilter.changes.pipe(startWith(null)), - this.backupIdFilter.changes.pipe(startWith(null)), this.taskFilter.changes.pipe(startWith(null)), ]) .pipe( @@ -260,10 +257,6 @@ export class BackupsComponent implements AfterViewInit, OnDestroy, OnInit { params.toSizeMB = this.backupSizeFilter.ranges.toSizeMB; } - if (this.backupIdFilter.isActive()) { - params.id = this.backupIdFilter.ranges.id; - } - if(this.backupSavesetFilter.isActive()) { params.saveset = this.backupSavesetFilter.ranges.saveset; } From fd97e96e2be12e2f46152cd3767b3cf5400cb316 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Tue, 10 Dec 2024 11:40:51 +0100 Subject: [PATCH 20/22] fix analyzer tests Signed-off-by: engelharddirk --- apps/analyzer/tests/test_analyzer.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/apps/analyzer/tests/test_analyzer.py b/apps/analyzer/tests/test_analyzer.py index 2ce19ca1..db404644 100644 --- a/apps/analyzer/tests/test_analyzer.py +++ b/apps/analyzer/tests/test_analyzer.py @@ -6,9 +6,10 @@ from tests.mock_database import MockDatabase -def _create_mock_result(task, uuid, fdi_type, data_size, start_time, task_uuid=None, is_backup=1): +def _create_mock_result(task, uuid, saveset, fdi_type, data_size, start_time, task_uuid=None, is_backup=1): mock_result = Result() mock_result.task = task + mock_result.saveset = saveset mock_result.uuid = uuid mock_result.fdi_type = fdi_type mock_result.data_size = data_size @@ -26,10 +27,10 @@ def _create_mock_task(uuid, task): def test_update_data_all_types(): - mock_result1 = _create_mock_result("foo", "1", "F", 100_000_000, datetime.fromisoformat("2000-01-01")) - mock_result2 = _create_mock_result("foo", "2", "D", 150_000_000, datetime.fromisoformat("2000-01-02")) - mock_result3 = _create_mock_result("foo", "3", "I", 200_000_000, datetime.fromisoformat("2000-01-03")) - mock_result4 = _create_mock_result("foo", "4", "C", 250_000_000, datetime.fromisoformat("2000-01-04"), '123') + mock_result1 = _create_mock_result("foo", "1", "saveset1", "F", 100_000_000, datetime.fromisoformat("2000-01-01")) + mock_result2 = _create_mock_result("foo", "2", "saveset2", "D", 150_000_000, datetime.fromisoformat("2000-01-02")) + mock_result3 = _create_mock_result("foo", "3", "saveset3", "I", 200_000_000, datetime.fromisoformat("2000-01-03")) + mock_result4 = _create_mock_result("foo", "4", "saveset4", "C", 250_000_000, datetime.fromisoformat("2000-01-04"), '123') mock_results = [mock_result1, mock_result2, mock_result3, mock_result4] mock_task1 = _create_mock_task("1", "task1") @@ -46,25 +47,29 @@ def test_update_data_all_types(): "sizeMB": mock_result1.data_size / 1_000_000, "creationDate": mock_result1.start_time.isoformat(), "type": "FULL", - "taskId": None + "taskId": None, + "saveset": mock_result1.saveset }, { "id": mock_result2.uuid, "sizeMB": mock_result2.data_size / 1_000_000, "creationDate": mock_result2.start_time.isoformat(), "type": "DIFFERENTIAL", - "taskId": None + "taskId": None, + "saveset": mock_result2.saveset }, { "id": mock_result3.uuid, "sizeMB": mock_result3.data_size / 1_000_000, "creationDate": mock_result3.start_time.isoformat(), "type": "INCREMENTAL", - "taskId": None + "taskId": None, + "saveset": mock_result3.saveset }, { "id": mock_result4.uuid, "sizeMB": mock_result4.data_size / 1_000_000, "creationDate": mock_result4.start_time.isoformat(), "type": "COPY", - "taskId": '123' + "taskId": '123', + "saveset": mock_result4.saveset }] assert backend.tasks == [ From 7f9269ea28e1e424ea78601aff43d54fd9676423 Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Tue, 10 Dec 2024 11:42:22 +0100 Subject: [PATCH 21/22] more review changes Signed-off-by: engelharddirk --- apps/analyzer/metadata_analyzer/size_alert.py | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/analyzer/metadata_analyzer/size_alert.py b/apps/analyzer/metadata_analyzer/size_alert.py index c591127f..98da0c3e 100644 --- a/apps/analyzer/metadata_analyzer/size_alert.py +++ b/apps/analyzer/metadata_analyzer/size_alert.py @@ -1,7 +1,6 @@ class SizeAlert: def __init__(self, result, reference_size): self.uuid = result.uuid - self.backup_saveset = result.saveset self.size = result.data_size / 1_000_000 self.reference_size = reference_size / 1_000_000 self.date = result.start_time From 4f042e1ae7a6a719ec772f159b2c9dfae52c698b Mon Sep 17 00:00:00 2001 From: engelharddirk Date: Tue, 10 Dec 2024 11:53:19 +0100 Subject: [PATCH 22/22] fix backend tests Signed-off-by: engelharddirk --- .../src/app/alerting/alerting.controller.spec.ts | 1 + .../src/app/alerting/alerting.service.spec.ts | 1 + apps/backend/src/app/alerting/alerting.service.ts | 12 ++++++------ .../dto/alerts/createCreationDateAlert.dto.ts | 8 +------- .../app/alerting/dto/alerts/createSizeAlert.dto.ts | 8 +------- .../src/app/backupData/backupData.controller.spec.ts | 1 + apps/backend/src/app/utils/mail/mail.service.spec.ts | 1 + 7 files changed, 12 insertions(+), 20 deletions(-) diff --git a/apps/backend/src/app/alerting/alerting.controller.spec.ts b/apps/backend/src/app/alerting/alerting.controller.spec.ts index e1325743..d4aad052 100644 --- a/apps/backend/src/app/alerting/alerting.controller.spec.ts +++ b/apps/backend/src/app/alerting/alerting.controller.spec.ts @@ -29,6 +29,7 @@ const mockedBackupDataEntity: BackupDataEntity = { sizeMB: 100, type: BackupType.FULL, creationDate: new Date(), + saveset: 'saveset1', }; const mockedSizeAlertTypeEntity: AlertTypeEntity = { diff --git a/apps/backend/src/app/alerting/alerting.service.spec.ts b/apps/backend/src/app/alerting/alerting.service.spec.ts index ea109cd5..6d4e5d64 100644 --- a/apps/backend/src/app/alerting/alerting.service.spec.ts +++ b/apps/backend/src/app/alerting/alerting.service.spec.ts @@ -28,6 +28,7 @@ const mockedBackupDataEntity: BackupDataEntity = { sizeMB: 100, type: BackupType.FULL, creationDate: new Date(), + saveset: 'saveset1', }; const mockedSizeAlertTypeEntity: AlertTypeEntity = { diff --git a/apps/backend/src/app/alerting/alerting.service.ts b/apps/backend/src/app/alerting/alerting.service.ts index af8ceaf1..88939bae 100644 --- a/apps/backend/src/app/alerting/alerting.service.ts +++ b/apps/backend/src/app/alerting/alerting.service.ts @@ -125,7 +125,7 @@ export class AlertingService { async createSizeAlert(createSizeAlertDto: CreateSizeAlertDto) { // Check if alert already exists const existingAlertEntity = await this.sizeAlertRepository.findOneBy({ - backup: { id: createSizeAlertDto.backupUuid }, + backup: { id: createSizeAlertDto.backupId }, }); if (existingAlertEntity) { @@ -138,11 +138,11 @@ export class AlertingService { alert.referenceSize = createSizeAlertDto.referenceSize; const backup = await this.backupDataService.findOneById( - createSizeAlertDto.backupUuid + createSizeAlertDto.backupId ); if (!backup) { throw new NotFoundException( - `Backup with id ${createSizeAlertDto.backupUuid} not found` + `Backup with id ${createSizeAlertDto.backupId} not found` ); } alert.backup = backup; @@ -167,7 +167,7 @@ export class AlertingService { ) { // Check if alert already exists const existingAlertEntity = await this.creationDateRepository.findOneBy({ - backup: { id: createCreationDateAlertDto.backupUuid }, + backup: { id: createCreationDateAlertDto.backupId }, }); if (existingAlertEntity) { @@ -180,11 +180,11 @@ export class AlertingService { alert.referenceDate = createCreationDateAlertDto.referenceDate; const backup = await this.backupDataService.findOneById( - createCreationDateAlertDto.backupUuid + createCreationDateAlertDto.backupId ); if (!backup) { throw new NotFoundException( - `Backup with id ${createCreationDateAlertDto.backupUuid} not found` + `Backup with id ${createCreationDateAlertDto.backupId} not found` ); } alert.backup = backup; diff --git a/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts b/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts index 94eaf756..a8f76431 100644 --- a/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts +++ b/apps/backend/src/app/alerting/dto/alerts/createCreationDateAlert.dto.ts @@ -6,13 +6,7 @@ export class CreateCreationDateAlertDto { description: 'Uuid of the Backup', required: true, }) - backupUuid!: string; - - @ApiProperty({ - description: 'Saveset name of the belonging backup', - required: true, - }) - backupSaveset!: string; + backupId!: string; @ApiProperty({ description: 'Date, the backup started', diff --git a/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts b/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts index 02d1a4b6..dd3649ff 100644 --- a/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts +++ b/apps/backend/src/app/alerting/dto/alerts/createSizeAlert.dto.ts @@ -6,13 +6,7 @@ export class CreateSizeAlertDto { description: 'Uuid of the Backup', required: true, }) - backupUuid!: string; - - @ApiProperty({ - description: 'Saveset name of the belonging backup', - required: true, - }) - backupSaveset!: string; + backupId!: string; @ApiProperty({ description: 'Size of the Backup, which is the reason for the alert', diff --git a/apps/backend/src/app/backupData/backupData.controller.spec.ts b/apps/backend/src/app/backupData/backupData.controller.spec.ts index 8d55e416..81ae9431 100644 --- a/apps/backend/src/app/backupData/backupData.controller.spec.ts +++ b/apps/backend/src/app/backupData/backupData.controller.spec.ts @@ -73,6 +73,7 @@ describe('BackupDataController (e2e)', () => { expect(response.body).toEqual({ id: createBackupDataDto.id, + saveset: createBackupDataDto.saveset, sizeMB: createBackupDataDto.sizeMB, creationDate: createBackupDataDto.creationDate.toISOString(), }); diff --git a/apps/backend/src/app/utils/mail/mail.service.spec.ts b/apps/backend/src/app/utils/mail/mail.service.spec.ts index fa2e4932..35d90b25 100644 --- a/apps/backend/src/app/utils/mail/mail.service.spec.ts +++ b/apps/backend/src/app/utils/mail/mail.service.spec.ts @@ -88,6 +88,7 @@ describe('MailService', () => { sizeMB: 100, type: BackupType.FULL, creationDate: new Date(), + saveset: 'saveset1', }, };