dev@locazia: add indexator, uploader

This commit is contained in:
user 2024-02-29 23:17:17 +03:00
parent 7eb012bdcc
commit 308099f8de
5 changed files with 118 additions and 10 deletions

View File

@ -1,6 +1,8 @@
import sys
import traceback import traceback
from asyncio import sleep from asyncio import sleep
from datetime import datetime from datetime import datetime
import asyncio, sys
from aiogram import Bot from aiogram import Bot
@ -58,13 +60,38 @@ async def execute_queue(app):
if __name__ == '__main__': if __name__ == '__main__':
app.ctx.memory = Memory() startup_target = '__main__'
app.ctx.memory._telegram_bot = Bot(TELEGRAM_API_KEY) try:
dp._s_memory = app.ctx.memory startup_target = sys.argv[3]
app.ctx.memory._app = app except IndexError:
pass
app.add_task(execute_queue(app)) if startup_target == '__main__':
app.add_task(queue_daemon(app)) app.ctx.memory = Memory()
app.add_task(dp.start_polling(app.ctx.memory._telegram_bot)) app.ctx.memory._telegram_bot = Bot(TELEGRAM_API_KEY)
dp._s_memory = app.ctx.memory
app.ctx.memory._app = app
app.run(host='0.0.0.0', port=SANIC_PORT) app.add_task(execute_queue(app))
app.add_task(queue_daemon(app))
app.add_task(dp.start_polling(app.ctx.memory._telegram_bot))
app.run(host='0.0.0.0', port=SANIC_PORT)
else:
loop = asyncio.get_event_loop()
startup_fn = None
if startup_target == 'indexator':
from app.core.background.indexator_service import main as target_fn
elif startup_target == 'uploader':
from app.core.background.uploader_service import main as target_fn
startup_fn = startup_fn or target_fn
assert startup_fn
try:
loop.run_until_complete(startup_fn())
except BaseException as e:
make_log(startup_target[0].upper() + startup_target[1:], f"Error: {e}" + '\n' + str(traceback.format_exc()), level='error')
sys.exit(1)
finally:
loop.close()

View File

@ -1,5 +1,6 @@
from app.core.models._blockchain.ton.connect import TonConnect, unpack_wallet_info
from sanic import response from sanic import response
from datetime import datetime, timedelta
def valid_royalty_params(royalty_params): def valid_royalty_params(royalty_params):
@ -15,6 +16,7 @@ def valid_royalty_params(royalty_params):
async def s_api_v1_blockchain_send_new_content_message(request): async def s_api_v1_blockchain_send_new_content_message(request):
assert request.json, "No data provided" assert request.json, "No data provided"
assert request.ctx.user, "No authorized user provided"
for field_key, field_value in { for field_key, field_value in {
'title': lambda x: isinstance(x, str), 'title': lambda x: isinstance(x, str),
@ -30,7 +32,20 @@ async def s_api_v1_blockchain_send_new_content_message(request):
assert field_key in request.json, f"No {field_key} provided" assert field_key in request.json, f"No {field_key} provided"
assert field_value(request.json[field_key]), f"Invalid {field_key} provided" assert field_value(request.json[field_key]), f"Invalid {field_key} provided"
assert request.json.get("title"), "No title provided" ton_connect, ton_connection = TonConnect.by_user(request.ctx.db_session, request.ctx.user, callback_fn=())
await ton_connect.restore_connection()
assert ton_connect.connected, "No connected wallet"
# await ton_connect._sdk_client.send_transaction({
# 'valid_until': int(datetime.now().timestamp()),
# 'messages': [
# {
# 'address':
# }
# ]
# })
return response.json({"message": "Transaction requested"}) return response.json({"message": "Transaction requested"})

View File

@ -0,0 +1,17 @@
from app.core.logger import make_log
import asyncio
async def main():
make_log("Indexator", "Service started", level="info")
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()

View File

@ -0,0 +1,17 @@
from app.core.logger import make_log
import asyncio
async def main():
make_log("Uploader", "Service started", level="info")
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()

View File

@ -31,3 +31,35 @@ services:
depends_on: depends_on:
maria_db: maria_db:
condition: service_healthy condition: service_healthy
indexator:
build:
context: .
dockerfile: Dockerfile
command: python -m app indexator
env_file:
- .env
links:
- maria_db
volumes:
- ./logs:/app/logs
- ./storedContent:/app/data
depends_on:
maria_db:
condition: service_healthy
uploader:
build:
context: .
dockerfile: Dockerfile
command: python -m app uploader
env_file:
- .env
links:
- maria_db
volumes:
- ./logs:/app/logs
- ./storedContent:/app/data
depends_on:
maria_db:
condition: service_healthy