from sanic import response def valid_royalty_params(royalty_params): assert sum([x['value'] for x in royalty_params]) == 10000, "Values of royalties should sum to 10000" for field_key, field_value in { 'address': lambda x: isinstance(x, str), 'value': lambda x: (isinstance(x, int) and 0 <= x <= 10000) }.items(): assert field_key in royalty_params, f"No {field_key} provided" assert field_value(royalty_params[field_key]), f"Invalid {field_key} provided" return True async def s_api_v1_blockchain_send_new_content_message(request): assert request.json, "No data provided" for field_key, field_value in { 'title': lambda x: isinstance(x, str), 'authors': lambda x: isinstance(x, list), 'content': lambda x: isinstance(x, str), 'image': lambda x: isinstance(x, str), 'description': lambda x: isinstance(x, str), 'price': lambda x: (isinstance(x, str) and x.isdigit()), 'allowResale': lambda x: isinstance(x, bool), 'royaltyParams': lambda x: (isinstance(x, dict) and valid_royalty_params(x)), }.items(): assert field_key in request.json, f"No {field_key} provided" assert field_value(request.json[field_key]), f"Invalid {field_key} provided" assert request.json.get("title"), "No title provided" return response.json({"message": "Transaction requested"}) async def s_api_v1_blockchain_send_purchase_content_message(request): assert request.json, "No data provided" for field_key, field_value in { 'content_address': lambda x: isinstance(x, str), 'price': lambda x: (isinstance(x, str) and x.isdigit()), }.items(): assert field_key in request.json, f"No {field_key} provided" assert field_value(request.json[field_key]), f"Invalid {field_key} provided" return response.json({"message": "Transaction requested"})