async def application(): logger = get_logger(__name__) app = web.Application(logger=logger) mysql_config = config.api_server.mysql await init_db( host=mysql_config.host, port=mysql_config.port, user=mysql_config.user, password=mysql_config.password, db=mysql_config.database, ) redis_config = config.api_server.redis notification_queue_pool = await aioredis.create_pool( f'redis://{redis_config.host}:{redis_config.port}', password=redis_config.password, minsize=5, maxsize=10, db=redis_config.notification_queue.database, ) storage = { 'redis': { 'notification_queue': notification_queue_pool, } } external = {} secret = {} resource_list = { '/devices': DevicesHttpResource, '/notifications': NotificationsHttpResource, } for path, resource in resource_list.items(): subapp = web.Application(logger=logger) resource( router=subapp.router, storage=storage, secret=secret, external=external, ).route() plugin_app(app, path, subapp) cors = aiohttp_cors.setup(app) allow_url = '*' for route in list(app.router.routes()): cors.add( route, { allow_url: aiohttp_cors.ResourceOptions(allow_credentials=True, allow_headers='*', allow_methods=[route.method]) }) return app
async def main(): logger = get_logger(__name__) runner = web.AppRunner(await application()) await runner.setup() port = config.api_server.port site = web.TCPSite(runner, port=port, backlog=1024) await site.start() logger.debug(f'Run server / {port}') # Infinite loop for maintaining server alive # https://github.com/aio-libs/aiohttp/blob/master/aiohttp/web.py#L365 while True: await asyncio.sleep(100 * 3600)
import deserialize from common.logger.logger import get_logger from common.structure.job.messaging import DevicePlatform from common.structure.job.notification import NotificationSentResultMessageArgs from worker.notification.external.jraze.jraze import JrazeApi from worker.notification.task import AbstractTask logger = get_logger(__name__) class UpdatePushResultTask(AbstractTask): def __init__(self, jraze_api: JrazeApi): self.jraze_api: JrazeApi = jraze_api async def run(self, kwargs: dict): task_args: NotificationSentResultMessageArgs = deserialize.deserialize( NotificationSentResultMessageArgs, kwargs) if task_args.device_platform == DevicePlatform.IOS: await self.jraze_api.increase_notification_sent( notification_uuid=task_args.notification_uuid, ios=task_args.sent, ) elif task_args.device_platform == DevicePlatform.Android: await self.jraze_api.increase_notification_sent( notification_uuid=task_args.notification_uuid, android=task_args.sent, )
async def application(): logger = get_logger(__name__) app = web.Application(logger=logger) mysql_config = config.api_server.mysql await init_db( host=mysql_config.host, port=mysql_config.port, user=mysql_config.user, password=mysql_config.password, db=mysql_config.database, ) mongo_config = config.api_server.mongo mongo_client = motor.motor_asyncio.AsyncIOMotorClient( f'mongodb://{mongo_config.user}:{mongo_config.password}' f'@{mongo_config.host}:{mongo_config.port}' )[mongo_config.database] task_queue_config = config.api_server.task_queue task_queue_pool = await aiomysql.create_pool( host=task_queue_config.host, port=task_queue_config.port, user=task_queue_config.user, password=task_queue_config.password, db=task_queue_config.database, autocommit=False, ) notification_task_queue_repository = TaskRepository( pool=task_queue_pool, topic_name='NOTIFICATION_TOPIC', ) await notification_task_queue_repository.initialize() notification_task_queue = TasksDispatcher( repository=notification_task_queue_repository, ) resource_list = { '/devices': DevicesHttpResource( device_dispatcher=DeviceDispatcher( database=mongo_client ) ), '/notifications': NotificationsHttpResource( device_dispatcher=DeviceDispatcher( database=mongo_client ), notification_task_queue=notification_task_queue, ), '/internal': InternalHttpResource( internal_api_keys=config.api_server.internal_api_keys, ), } for path, resource in resource_list.items(): resource: AbstractResource = resource # NOTE(pjongy): For type hinting resource.route() plugin_app(app, path, resource.app) cors = aiohttp_cors.setup(app) allow_url = '*' for route in list(app.router.routes()): cors.add( route, { allow_url: aiohttp_cors.ResourceOptions( allow_credentials=True, allow_headers='*', allow_methods=[route.method] ) } ) return app