From 1f74cbbdbde5b95f1f8c3b9524822b35fe7f3b69 Mon Sep 17 00:00:00 2001 From: Siarhei Date: Fri, 19 Sep 2025 17:22:09 +0300 Subject: [PATCH] [CVAT] fix: fixed manifest validation misconfiguration (#3573) --- packages/examples/cvat/exchange-oracle/src/core/manifest.py | 6 +++--- .../cvat/exchange-oracle/src/endpoints/serializers.py | 2 +- .../examples/cvat/exchange-oracle/src/services/exchange.py | 2 +- .../tests/integration/services/test_exchange.py | 4 ++-- .../examples/cvat/exchange-oracle/tests/utils/manifest.json | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/examples/cvat/exchange-oracle/src/core/manifest.py b/packages/examples/cvat/exchange-oracle/src/core/manifest.py index ca19196555..4a0f7a81c8 100644 --- a/packages/examples/cvat/exchange-oracle/src/core/manifest.py +++ b/packages/examples/cvat/exchange-oracle/src/core/manifest.py @@ -136,6 +136,9 @@ class AnnotationInfo(BaseModel): job_size: int = 10 "Frames per job, validation frames are not included" + qualifications: list[str] = Field(default_factory=list) + "A list of annotator qualifications required for participation" + @model_validator(mode="before") @classmethod def validate_label_type(cls, values: dict[str, Any]) -> dict[str, Any]: @@ -177,9 +180,6 @@ class TaskManifest(BaseModel): job_bounty: Decimal = Field(ge=0) "Assignment bounty, a decimal value in HMT" - qualifications: list[str] = Field(default_factory=list) - "A list of annotator qualifications required for participation" - def parse_manifest(manifest: Any) -> TaskManifest: return TaskManifest.model_validate(manifest) diff --git a/packages/examples/cvat/exchange-oracle/src/endpoints/serializers.py b/packages/examples/cvat/exchange-oracle/src/endpoints/serializers.py index 83d4c9ee71..219d40af40 100644 --- a/packages/examples/cvat/exchange-oracle/src/endpoints/serializers.py +++ b/packages/examples/cvat/exchange-oracle/src/endpoints/serializers.py @@ -63,7 +63,7 @@ def serialize_job( reward_token=reward_token, created_at=project.created_at, updated_at=project.updated_at, - qualifications=manifest.qualifications, + qualifications=manifest.annotation.qualifications, ) diff --git a/packages/examples/cvat/exchange-oracle/src/services/exchange.py b/packages/examples/cvat/exchange-oracle/src/services/exchange.py index 5d6d1b3dda..5fdf0c854b 100644 --- a/packages/examples/cvat/exchange-oracle/src/services/exchange.py +++ b/packages/examples/cvat/exchange-oracle/src/services/exchange.py @@ -38,7 +38,7 @@ def create_assignment( manifest = parse_manifest(get_escrow_manifest(chain_id, escrow_address)) - if not all(q in qualifications for q in manifest.qualifications): + if not all(q in qualifications for q in manifest.annotation.qualifications): raise UserQualificationError if cvat_service.has_active_user_assignments( diff --git a/packages/examples/cvat/exchange-oracle/tests/integration/services/test_exchange.py b/packages/examples/cvat/exchange-oracle/tests/integration/services/test_exchange.py index e41b5cca89..e2a52815ce 100644 --- a/packages/examples/cvat/exchange-oracle/tests/integration/services/test_exchange.py +++ b/packages/examples/cvat/exchange-oracle/tests/integration/services/test_exchange.py @@ -215,7 +215,7 @@ def test_create_assignment_no_required_qualifications(self): patch("src.services.exchange.get_escrow_manifest") as mock_get_manifest, ): manifest = json.load(data) - manifest["qualifications"] = ["random_qualification"] + manifest["annotation"]["qualifications"] = ["random_qualification"] mock_get_manifest.return_value = manifest with pytest.raises(Exception, match="User doesn't have required qualifications."): create_assignment(ESCROW_ADDRESS, Networks.localhost, user_address, []) @@ -244,7 +244,7 @@ def test_create_assignment_with_required_qualifications(self): patch("src.services.exchange.cvat_api"), ): manifest = json.load(data) - manifest["qualifications"] = ["test", "test2"] + manifest["annotation"]["qualifications"] = ["test", "test2"] mock_get_manifest.return_value = manifest assignment_id = create_assignment( cvat_project.escrow_address, diff --git a/packages/examples/cvat/exchange-oracle/tests/utils/manifest.json b/packages/examples/cvat/exchange-oracle/tests/utils/manifest.json index 950b15cd3f..60677154c2 100644 --- a/packages/examples/cvat/exchange-oracle/tests/utils/manifest.json +++ b/packages/examples/cvat/exchange-oracle/tests/utils/manifest.json @@ -8,13 +8,13 @@ "user_guide": "https://test.storage.googleapis.com", "type": "image_boxes", "job_size": 10, - "max_time": 300 + "max_time": 300, + "qualifications": [] }, "validation": { "min_quality": 0.8, "val_size": 2, "gt_url": "https://test.storage.googleapis.com" }, - "job_bounty": "5.001123929619726", - "qualifications": [] + "job_bounty": "5.001123929619726" }