From 6bd90ee9b008da12e6acc2a5b1f29229b28a5906 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Mon, 21 Jul 2025 13:10:17 +0300 Subject: [PATCH 01/11] ADd missing env var in the template --- packages/examples/cvat/recording-oracle/src/.env.template | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/examples/cvat/recording-oracle/src/.env.template b/packages/examples/cvat/recording-oracle/src/.env.template index a5851b0fb6..d63b8d41e3 100644 --- a/packages/examples/cvat/recording-oracle/src/.env.template +++ b/packages/examples/cvat/recording-oracle/src/.env.template @@ -77,6 +77,7 @@ ENABLE_CUSTOM_CLOUD_HOST= MIN_AVAILABLE_GT_THRESHOLD= MAX_USABLE_GT_SHARE= +ENABLE_GT_BANS= UNVERIFIABLE_ASSIGNMENTS_THRESHOLD= MAX_ESCROW_ITERATIONS= WARMUP_ITERATIONS= From 07b0ac23085bd1de31c3c69ad6fd9f9b6a620635 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Mon, 21 Jul 2025 13:15:38 +0300 Subject: [PATCH 02/11] Use default chunk size --- .../examples/cvat/exchange-oracle/src/cvat/api_calls.py | 8 +++++--- .../cvat/exchange-oracle/src/handlers/job_creation.py | 7 ------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/packages/examples/cvat/exchange-oracle/src/cvat/api_calls.py b/packages/examples/cvat/exchange-oracle/src/cvat/api_calls.py index 06934225b4..02f442f4c2 100644 --- a/packages/examples/cvat/exchange-oracle/src/cvat/api_calls.py +++ b/packages/examples/cvat/exchange-oracle/src/cvat/api_calls.py @@ -359,7 +359,7 @@ def put_task_data( task_id: int, cloudstorage_id: int, *, - chunk_size: int, + chunk_size: int | None = None, filenames: list[str] | None = None, sort_images: bool | None = None, validation_params: dict[str, str | float | list[str]] | None = None, @@ -404,8 +404,10 @@ def put_task_data( else models.SortingMethod("predefined") ) + if chunk_size is not None: + kwargs["chunk_size"] = chunk_size + data_request = models.DataRequest( - chunk_size=chunk_size, cloud_storage_id=cloudstorage_id, image_quality=Config.cvat_config.image_quality, use_cache=True, @@ -414,7 +416,7 @@ def put_task_data( **kwargs, ) try: - (_, response) = api_client.tasks_api.create_data(task_id, data_request=data_request) + api_client.tasks_api.create_data(task_id, data_request=data_request) return except exceptions.ApiException as e: diff --git a/packages/examples/cvat/exchange-oracle/src/handlers/job_creation.py b/packages/examples/cvat/exchange-oracle/src/handlers/job_creation.py index 64645992f4..66fea34f40 100644 --- a/packages/examples/cvat/exchange-oracle/src/handlers/job_creation.py +++ b/packages/examples/cvat/exchange-oracle/src/handlers/job_creation.py @@ -166,10 +166,6 @@ def _task_segment_size(self) -> int: def _job_val_frames_count(self) -> int: return self.manifest.validation.val_size - @property - def _task_chunk_size(self) -> int: - return self._task_segment_size + self._job_val_frames_count - def __enter__(self): return self @@ -434,7 +430,6 @@ def build(self): cvat_task.id, cloud_storage.id, filenames=data_subset, - chunk_size=self._task_chunk_size, validation_params={ "gt_filenames": gt_filenames, # include whole GT dataset into each task "gt_frames_per_job_count": self._job_val_frames_count, @@ -1614,7 +1609,6 @@ def _create_on_cvat(self): cvat_task.id, cvat_cloud_storage.id, filenames=filenames, - chunk_size=self._task_chunk_size, validation_params={ "gt_filenames": gt_filenames, "gt_frames_per_job_count": self._job_val_frames_count, @@ -2942,7 +2936,6 @@ def _task_params_label_key(ts): cvat_task.id, cvat_cloud_storage.id, filenames=point_label_filenames + gt_point_label_filenames, - chunk_size=self._task_chunk_size, validation_params={ "gt_filenames": gt_point_label_filenames, "gt_frames_per_job_count": self._job_val_frames_count, From f00e7f80d8424b0f969a62f8f01ec9b402c47bcb Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Mon, 21 Jul 2025 14:14:15 +0300 Subject: [PATCH 03/11] Remove dead code --- .../cvat/exchange-oracle/src/services/cvat.py | 40 ------------------- 1 file changed, 40 deletions(-) diff --git a/packages/examples/cvat/exchange-oracle/src/services/cvat.py b/packages/examples/cvat/exchange-oracle/src/services/cvat.py index 5b2bbc96e0..06f3ef5aa7 100644 --- a/packages/examples/cvat/exchange-oracle/src/services/cvat.py +++ b/packages/examples/cvat/exchange-oracle/src/services/cvat.py @@ -329,46 +329,6 @@ def create_escrow_validations(session: Session, *, limit: int = 100) -> list[tup return session.execute(insert_stmt).all() -def get_available_projects(session: Session, *, limit: int = 10) -> list[Project]: - return ( - session.query(Project) - .where( - (Project.status == ProjectStatuses.annotation.value) - & Project.jobs.any( - (Job.status == JobStatuses.new) - & ~Job.assignments.any(Assignment.status == AssignmentStatuses.created.value) - ) - ) - .distinct() - .limit(limit) - .all() - ) - - -def get_projects_by_assignee( - session: Session, - wallet_address: str | None = None, - *, - limit: int = 10, - for_update: bool | ForUpdateParams = False, -) -> list[Project]: - return ( - _maybe_for_update(session.query(Project), enable=for_update) - .where( - Project.jobs.any( - Job.assignments.any( - (Assignment.user_wallet_address == wallet_address) - & (Assignment.status == AssignmentStatuses.created) - & (utcnow() < Assignment.expires_at) - ) - ) - ) - .distinct() - .limit(limit) - .all() - ) - - def update_project_status(session: Session, project_id: str, status: ProjectStatuses) -> None: upd = update(Project).where(Project.id == project_id).values(status=status.value) session.execute(upd) From 95ed47f19fbd06b3b52183deccd0959f2edb08f8 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Mon, 21 Jul 2025 16:02:12 +0300 Subject: [PATCH 04/11] Fix build deps --- packages/examples/cvat/exchange-oracle/poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/examples/cvat/exchange-oracle/poetry.lock b/packages/examples/cvat/exchange-oracle/poetry.lock index 8af6c9bc2d..3566ac5494 100644 --- a/packages/examples/cvat/exchange-oracle/poetry.lock +++ b/packages/examples/cvat/exchange-oracle/poetry.lock @@ -1155,13 +1155,13 @@ files = [ [[package]] name = "distlib" -version = "0.3.8" +version = "0.4.0" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, + {file = "distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16"}, + {file = "distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d"}, ] [[package]] From 7abeea67a40345e7e8a24179a0f1a3b36461cd7b Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Wed, 23 Jul 2025 14:57:13 +0300 Subject: [PATCH 05/11] Allow extra GT labels in skeletons_from_boxes --- .../src/handlers/job_creation.py | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/examples/cvat/exchange-oracle/src/handlers/job_creation.py b/packages/examples/cvat/exchange-oracle/src/handlers/job_creation.py index 66fea34f40..566d69a959 100644 --- a/packages/examples/cvat/exchange-oracle/src/handlers/job_creation.py +++ b/packages/examples/cvat/exchange-oracle/src/handlers/job_creation.py @@ -1786,19 +1786,33 @@ def _validate_gt_labels(self): for node_label in skeleton_label.nodes: manifest_labels.add((node_label, skeleton_label.name)) - if gt_labels - manifest_labels: + if manifest_labels - gt_labels: raise DatasetValidationError( - "GT labels do not match job labels. Unknown labels: {}".format( + "Could not find GT for labels {}".format( format_sequence( [ label_name if not parent_name else f"{parent_name}.{label_name}" - for label_name, parent_name in gt_labels - manifest_labels + for label_name, parent_name in manifest_labels - gt_labels ] ), ) ) - # Reorder labels to match the manifest + # It should not be an issue that there are some extra GT labels - they should + # just be skipped. + if gt_labels - manifest_labels: + self.logger.info( + "Skipping unknown GT labels: {}".format( + format_sequence( + [ + label_name if not parent_name else f"{parent_name}.{label_name}" + for label_name, parent_name in gt_labels - manifest_labels + ] + ) + ) + ) + + # Reorder and filter labels to match the manifest self._input_gt_dataset.transform( ProjectLabels, dst_labels=[label.name for label in self.manifest.annotation.labels] ) From fea9cff292c1eada46b99ad8ccf6d922dd7a2b88 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Wed, 23 Jul 2025 14:58:18 +0300 Subject: [PATCH 06/11] Simplify webhook sending in debug mode --- .../examples/cvat/exchange-oracle/debug.py | 79 ++++++++++++++++--- .../examples/cvat/recording-oracle/debug.py | 31 ++++++++ 2 files changed, 100 insertions(+), 10 deletions(-) diff --git a/packages/examples/cvat/exchange-oracle/debug.py b/packages/examples/cvat/exchange-oracle/debug.py index 1b0deab363..4efb07e978 100644 --- a/packages/examples/cvat/exchange-oracle/debug.py +++ b/packages/examples/cvat/exchange-oracle/debug.py @@ -7,6 +7,8 @@ from typing import Any from unittest import mock +import inspect +import uuid import uvicorn from httpx import URL @@ -14,9 +16,10 @@ from src.core.config import Config from src.db import SessionLocal from src.services import cloud -from src.services import cvat as cvat_service +from src.services import cvat as cvat_db_service from src.services.cloud import BucketAccessInfo from src.utils.logging import format_sequence, get_function_logger +from src.utils.time import utcnow @contextmanager @@ -28,7 +31,9 @@ def _mock_cvat_cloud_storage_params(logger: Logger) -> Generator[None, None, Non def patched_make_cvat_cloud_storage_params(bucket_info: BucketAccessInfo) -> dict: original_host_url = bucket_info.host_url - if Config.development_config.cvat_in_docker: + if Config.development_config.cvat_in_docker and ( + "localhost" in original_host_url or "127.0.0.1" in original_host_url + ): bucket_info.host_url = str( URL(original_host_url).copy_with( host=Config.development_config.exchange_oracle_host @@ -110,6 +115,8 @@ def _mock_webhook_signature_checking(_: Logger) -> Generator[None, None, None]: - from reputation oracle - encoded with Config.localhost.reputation_oracle_address wallet address or signature "reputation_oracle" + + is optional in all cases. """ from src.chain.escrow import ( @@ -133,6 +140,33 @@ def patched_get_available_webhook_types(chain_id, escrow_address): d[Config.localhost.reputation_oracle_address.lower()] = OracleWebhookTypes.reputation_oracle return d + from src.services.webhook import inbox as original_inbox + + class PatchedInbox: + def __init__(self): + pass + + def __getattr__(self, name: str): + return getattr(original_inbox, name) + + def create_webhook( + self, + session, + escrow_address, + chain_id, + type: OracleWebhookTypes, + signature = None, + event_type = None, + event_data = None, + event = None, + ): + if signature in OracleWebhookTypes: + signature = f"{type.value}-{utcnow().isoformat(sep='T')}-{uuid.uuid4()}" + + _orig_params = inspect.signature(original_inbox.create_webhook).parameters + _args = {k: v for k, v in locals().items() if k in _orig_params} + return original_inbox.create_webhook(**_args) + with ( mock.patch("src.schemas.webhook.validate_address", lambda x: x), mock.patch( @@ -143,6 +177,7 @@ def patched_get_available_webhook_types(chain_id, escrow_address): "src.endpoints.webhook.validate_oracle_webhook_signature", patched_validate_oracle_webhook_signature, ), + mock.patch("src.services.webhook.inbox", PatchedInbox()) ): yield @@ -165,7 +200,7 @@ def decode_plain_json_token(self, token) -> dict[str, Any]: if (user_wallet := token_data.get("wallet_address")) and not token_data.get("email"): with SessionLocal.begin() as session: - user = cvat_service.get_user_by_id(session, user_wallet) + user = cvat_db_service.get_user_by_id(session, user_wallet) if not user: raise Exception(f"Could not find user with wallet address '{user_wallet}'") @@ -236,7 +271,30 @@ def apply_local_development_patches() -> Generator[None, None, None]: yield -if __name__ == "__main__": +def run_server(): + uvicorn.run( + app="src:app", + host="0.0.0.0", # noqa: S104 + port=int(Config.port), + workers=Config.workers_amount, + ) + + +# def fix_escrow(): +# from src.handlers.job_fixing import entrypoint + +# return entrypoint() + + +import sys +from argparse import ArgumentParser + + +def main(args: list[str] | None = None) -> int: + parser = ArgumentParser() + parser.add_argument("-e", "--entrypoint", default=run_server) + parsed_args = parser.parse_args(args) + with ExitStack() as es: is_dev = Config.environment == "development" if is_dev: @@ -245,9 +303,10 @@ def apply_local_development_patches() -> Generator[None, None, None]: Config.validate() register_in_kvstore() - uvicorn.run( - app="src:app", - host="0.0.0.0", # noqa: S104 - port=int(Config.port), - workers=Config.workers_amount, - ) + parsed_args.entrypoint() + + return 0 + + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:])) diff --git a/packages/examples/cvat/recording-oracle/debug.py b/packages/examples/cvat/recording-oracle/debug.py index 5d21b1029f..1d6fe702cf 100644 --- a/packages/examples/cvat/recording-oracle/debug.py +++ b/packages/examples/cvat/recording-oracle/debug.py @@ -4,6 +4,8 @@ from logging import Logger from pathlib import PurePosixPath from unittest import mock +import inspect +import uuid import uvicorn @@ -12,6 +14,7 @@ from src.services import cloud from src.services.cloud import BucketAccessInfo from src.utils.logging import format_sequence, get_function_logger +from src.utils.time import utcnow @contextmanager @@ -109,6 +112,33 @@ def patched_get_available_webhook_types(chain_id, escrow_address): d[Config.localhost.exchange_oracle_address.lower()] = OracleWebhookTypes.exchange_oracle return d + from src.services.webhook import inbox as original_inbox + + class PatchedInbox: + def __init__(self): + pass + + def __getattr__(self, name: str): + return getattr(original_inbox, name) + + def create_webhook( + self, + session, + escrow_address, + chain_id, + type: OracleWebhookTypes, + signature = None, + event_type = None, + event_data = None, + event = None, + ): + if signature in OracleWebhookTypes: + signature = f"{type.value}-{utcnow().isoformat(sep='T')}-{uuid.uuid4()}" + + _orig_params = inspect.signature(original_inbox.create_webhook).parameters + _args = {k: v for k, v in locals().items() if k in _orig_params} + return original_inbox.create_webhook(**_args) + with ( mock.patch("src.schemas.webhook.validate_address", lambda x: x), mock.patch( @@ -119,6 +149,7 @@ def patched_get_available_webhook_types(chain_id, escrow_address): "src.endpoints.webhook.validate_oracle_webhook_signature", patched_validate_oracle_webhook_signature, ), + mock.patch("src.services.webhook.inbox", PatchedInbox()) ): yield From ca3c67d7822d2f3fc72bb48048fd91d1a0f614e0 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Wed, 23 Jul 2025 15:05:13 +0300 Subject: [PATCH 07/11] Update build deps in ro --- packages/examples/cvat/recording-oracle/poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/examples/cvat/recording-oracle/poetry.lock b/packages/examples/cvat/recording-oracle/poetry.lock index 52dd95468a..22d120c3b0 100644 --- a/packages/examples/cvat/recording-oracle/poetry.lock +++ b/packages/examples/cvat/recording-oracle/poetry.lock @@ -1124,13 +1124,13 @@ files = [ [[package]] name = "distlib" -version = "0.3.8" +version = "0.4.0" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, + {file = "distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16"}, + {file = "distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d"}, ] [[package]] From c98d220f49d24af4906b97749fcf6083a4b7cfbd Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Wed, 23 Jul 2025 15:11:22 +0300 Subject: [PATCH 08/11] revert extra change --- .../examples/cvat/exchange-oracle/debug.py | 39 ++++--------------- 1 file changed, 7 insertions(+), 32 deletions(-) diff --git a/packages/examples/cvat/exchange-oracle/debug.py b/packages/examples/cvat/exchange-oracle/debug.py index 4efb07e978..c04a0ac439 100644 --- a/packages/examples/cvat/exchange-oracle/debug.py +++ b/packages/examples/cvat/exchange-oracle/debug.py @@ -270,31 +270,7 @@ def apply_local_development_patches() -> Generator[None, None, None]: yield - -def run_server(): - uvicorn.run( - app="src:app", - host="0.0.0.0", # noqa: S104 - port=int(Config.port), - workers=Config.workers_amount, - ) - - -# def fix_escrow(): -# from src.handlers.job_fixing import entrypoint - -# return entrypoint() - - -import sys -from argparse import ArgumentParser - - -def main(args: list[str] | None = None) -> int: - parser = ArgumentParser() - parser.add_argument("-e", "--entrypoint", default=run_server) - parsed_args = parser.parse_args(args) - +if __name__ == "__main__": with ExitStack() as es: is_dev = Config.environment == "development" if is_dev: @@ -303,10 +279,9 @@ def main(args: list[str] | None = None) -> int: Config.validate() register_in_kvstore() - parsed_args.entrypoint() - - return 0 - - -if __name__ == "__main__": - sys.exit(main(sys.argv[1:])) + uvicorn.run( + app="src:app", + host="0.0.0.0", # noqa: S104 + port=int(Config.port), + workers=Config.workers_amount, + ) From 8c2f5ae3548486d2d3a4210d1153c7b7af1b8a14 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Wed, 23 Jul 2025 15:53:54 +0300 Subject: [PATCH 09/11] Update tests --- .../tests/integration/services/test_cvat.py | 85 ------------------- 1 file changed, 85 deletions(-) diff --git a/packages/examples/cvat/exchange-oracle/tests/integration/services/test_cvat.py b/packages/examples/cvat/exchange-oracle/tests/integration/services/test_cvat.py index af25b2fb43..0863ae43d6 100644 --- a/packages/examples/cvat/exchange-oracle/tests/integration/services/test_cvat.py +++ b/packages/examples/cvat/exchange-oracle/tests/integration/services/test_cvat.py @@ -17,7 +17,6 @@ ) from src.db import SessionLocal from src.models.cvat import Assignment, DataUpload, Image, Job, Project, Task, User -from src.utils.time import utcnow from tests.utils.db_helper import ( create_project, @@ -347,90 +346,6 @@ def test_get_projects_by_status(self): assert len(projects) == 1 - def test_get_available_projects(self): - cvat_id_1 = 456 - (cvat_project, cvat_task, cvat_job) = create_project_task_and_job( - self.session, "0x86e83d346041E8806e352681f3F14549C0d2BC67", cvat_id_1 - ) - - projects = cvat_service.get_available_projects(self.session) - - assert len(projects) == 1 - - cvat_id_2 = 457 - (cvat_project, cvat_task) = create_project_and_task( - self.session, "0x86e83d346041E8806e352681f3F14549C0d2BC68", cvat_id_2 - ) - - cvat_task_id = cvat_task.cvat_id - cvat_project_id = cvat_project.cvat_id - - cvat_service.create_job( - session=self.session, - cvat_id=cvat_id_2, - cvat_task_id=cvat_task_id, - cvat_project_id=cvat_project_id, - status=JobStatuses.in_progress, - start_frame=0, - stop_frame=1, - ) - - cvat_id_3 = 458 - (cvat_project, cvat_task, _) = create_project_task_and_job( - self.session, "0x86e83d346041E8806e352681f3F14549C0d2BC69", cvat_id_3 - ) - - projects = cvat_service.get_available_projects(self.session) - assert len(projects) == 2 - assert any(project.cvat_id == cvat_id_1 for project in projects) - assert any(project.cvat_id == cvat_id_3 for project in projects) - - def test_get_projects_by_assignee(self): - wallet_address_1 = "0x86e83d346041E8806e352681f3F14549C0d2BC60" - cvat_id_1 = 456 - - create_project_task_and_job( - self.session, "0x86e83d346041E8806e352681f3F14549C0d2BC67", cvat_id_1 - ) - - user = User(wallet_address=wallet_address_1, cvat_id=cvat_id_1, cvat_email="test@hmt.ai") - self.session.add(user) - - cvat_service.create_assignment( - session=self.session, - wallet_address=wallet_address_1, - cvat_job_id=cvat_id_1, - expires_at=datetime.now() + timedelta(days=1), - ) - - wallet_address_2 = "0x86e83d346041E8806e352681f3F14549C0d2BC61" - cvat_id_2 = 457 - - create_project_task_and_job( - self.session, "0x86e83d346041E8806e352681f3F14549C0d2BC68", cvat_id_2 - ) - - user = User(wallet_address=wallet_address_2, cvat_id=cvat_id_2, cvat_email="test2@hmt.ai") - self.session.add(user) - - cvat_service.create_assignment( - session=self.session, - wallet_address=wallet_address_2, - cvat_job_id=cvat_id_2, - expires_at=utcnow(), - ) - - projects = cvat_service.get_projects_by_assignee(self.session, wallet_address_1) - - assert len(projects) == 1 - assert projects[0].cvat_id == cvat_id_1 - - projects = cvat_service.get_projects_by_assignee(self.session, wallet_address_2) - - assert ( - len(projects) == 0 - ) # expired should not be shown, https://github.com/humanprotocol/human-protocol/pull/1879 - def test_update_project_status(self): cvat_id = 1 cvat_cloudstorage_id = 1 From a7991b0f1e9aa784c21118a0a473e1d56b46a55e Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Wed, 23 Jul 2025 16:00:43 +0300 Subject: [PATCH 10/11] fix imports --- .../examples/cvat/exchange-oracle/debug.py | 19 +++++++++---------- .../examples/cvat/recording-oracle/debug.py | 14 +++++++------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/packages/examples/cvat/exchange-oracle/debug.py b/packages/examples/cvat/exchange-oracle/debug.py index c04a0ac439..566dc74416 100644 --- a/packages/examples/cvat/exchange-oracle/debug.py +++ b/packages/examples/cvat/exchange-oracle/debug.py @@ -1,5 +1,7 @@ import datetime +import inspect import json +import uuid from collections.abc import Generator from contextlib import ExitStack, contextmanager from logging import Logger @@ -7,8 +9,6 @@ from typing import Any from unittest import mock -import inspect -import uuid import uvicorn from httpx import URL @@ -31,9 +31,7 @@ def _mock_cvat_cloud_storage_params(logger: Logger) -> Generator[None, None, Non def patched_make_cvat_cloud_storage_params(bucket_info: BucketAccessInfo) -> dict: original_host_url = bucket_info.host_url - if Config.development_config.cvat_in_docker and ( - "localhost" in original_host_url or "127.0.0.1" in original_host_url - ): + if Config.development_config.cvat_in_docker: bucket_info.host_url = str( URL(original_host_url).copy_with( host=Config.development_config.exchange_oracle_host @@ -155,10 +153,10 @@ def create_webhook( escrow_address, chain_id, type: OracleWebhookTypes, - signature = None, - event_type = None, - event_data = None, - event = None, + signature=None, + event_type=None, + event_data=None, + event=None, ): if signature in OracleWebhookTypes: signature = f"{type.value}-{utcnow().isoformat(sep='T')}-{uuid.uuid4()}" @@ -177,7 +175,7 @@ def create_webhook( "src.endpoints.webhook.validate_oracle_webhook_signature", patched_validate_oracle_webhook_signature, ), - mock.patch("src.services.webhook.inbox", PatchedInbox()) + mock.patch("src.services.webhook.inbox", PatchedInbox()), ): yield @@ -270,6 +268,7 @@ def apply_local_development_patches() -> Generator[None, None, None]: yield + if __name__ == "__main__": with ExitStack() as es: is_dev = Config.environment == "development" diff --git a/packages/examples/cvat/recording-oracle/debug.py b/packages/examples/cvat/recording-oracle/debug.py index 1d6fe702cf..8bf711ecd6 100644 --- a/packages/examples/cvat/recording-oracle/debug.py +++ b/packages/examples/cvat/recording-oracle/debug.py @@ -1,11 +1,11 @@ import datetime +import inspect +import uuid from collections.abc import Generator from contextlib import ExitStack, contextmanager from logging import Logger from pathlib import PurePosixPath from unittest import mock -import inspect -import uuid import uvicorn @@ -127,10 +127,10 @@ def create_webhook( escrow_address, chain_id, type: OracleWebhookTypes, - signature = None, - event_type = None, - event_data = None, - event = None, + signature=None, + event_type=None, + event_data=None, + event=None, ): if signature in OracleWebhookTypes: signature = f"{type.value}-{utcnow().isoformat(sep='T')}-{uuid.uuid4()}" @@ -149,7 +149,7 @@ def create_webhook( "src.endpoints.webhook.validate_oracle_webhook_signature", patched_validate_oracle_webhook_signature, ), - mock.patch("src.services.webhook.inbox", PatchedInbox()) + mock.patch("src.services.webhook.inbox", PatchedInbox()), ): yield From 3e2e7bb01a39e82d2c36a5b5321500ee37c2f032 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Wed, 23 Jul 2025 16:03:30 +0300 Subject: [PATCH 11/11] Update description --- packages/examples/cvat/recording-oracle/debug.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/examples/cvat/recording-oracle/debug.py b/packages/examples/cvat/recording-oracle/debug.py index 8bf711ecd6..e250c6974e 100644 --- a/packages/examples/cvat/recording-oracle/debug.py +++ b/packages/examples/cvat/recording-oracle/debug.py @@ -90,6 +90,8 @@ def _mock_webhook_signature_checking(_: Logger) -> Generator[None, None, None]: - from exchange oracle - signed with Config.localhost.exchange_oracle_address or with signature "exchange_oracle" + + is optional. """ from src.chain.escrow import (