diff --git a/app/core/content/utils.py b/app/core/content/utils.py index 3cc89e8..697ac57 100644 --- a/app/core/content/utils.py +++ b/app/core/content/utils.py @@ -1,7 +1,9 @@ import json +import asyncio from hashlib import sha256 from base58 import b58encode +from datetime import datetime, timedelta from httpx import AsyncClient from app.core.logger import make_log @@ -46,26 +48,31 @@ async def create_metadata_for_item( metadata_hash = sha256(metadata_bin).digest() metadata_hash_b58 = b58encode(metadata_hash).decode() + metadata_content = None + init_ts = datetime.now() async with AsyncClient() as client: - response = await client.post( - f"{PROJECT_HOST}/api/v1/storage", - files={"file": ('metadata.json', metadata_bin, 'json')}, - headers={ - 'X-Service-Signature': signer.sign(metadata_hash), - 'X-Message-Hash': metadata_hash_b58, - } - ) - try: - assert response.status_code == 200 - except BaseException as e: - make_log("create_metadata_for_item", f"Res: {response.text}, Error: {e}", level='error') - raise e + while not metadata_content: + response = await client.post( + f"{PROJECT_HOST}/api/v1/storage", + files={"file": ('metadata.json', metadata_bin, 'json')}, + headers={ + 'X-Service-Signature': signer.sign(metadata_hash), + 'X-Message-Hash': metadata_hash_b58, + } + ) + try: + assert response.status_code == 200 + except BaseException as e: + make_log("create_metadata_for_item", f"Res: {response.text}, Error: {e}", level='error') + raise e - response_json = response.json() - metadata_sha256 = response_json['content_sha256'] + response_json = response.json() + metadata_sha256 = response_json['content_sha256'] - metadata_content = db_session.query(StoredContent).filter(StoredContent.hash == metadata_sha256).first() - if metadata_content: - return metadata_content + metadata_content = db_session.query(StoredContent).filter(StoredContent.hash == metadata_sha256).first() - raise Exception("Metadata not created") + await asyncio.sleep(.3) + if (datetime.now() - init_ts) > timedelta(seconds=10): + raise Exception("Metadata not created") + + return metadata_content