hyperboria/nexus/hub/main.py
the-superpirate 43be16e4bc - [nexus] Update schema
- [nexus] Remove outdated protos
  - [nexus] Development
  - [nexus] Development
  - [nexus] Development
  - [nexus] Development
  - [nexus] Development
  - [nexus] Refactor views
  - [nexus] Update aiosumma
  - [nexus] Add tags
  - [nexus] Development
  - [nexus] Update repository
  - [nexus] Update repository
  - [nexus] Update dependencies
  - [nexus] Update dependencies
  - [nexus] Fixes for MetaAPI
  - [nexus] Support for new queries
  - [nexus] Adopt new versions of search
  - [nexus] Improving Nexus
  - [nexus] Various fixes
  - [nexus] Add profile
  - [nexus] Fixes for ingestion
  - [nexus] Refactorings and bugfixes
  - [idm] Add profile methods
  - [nexus] Fix stalled nexus-meta bugs
  - [nexus] Various bugfixes
  - [nexus] Restore IDM API functionality

GitOrigin-RevId: a0842345a6dde5b321279ab5510a50c0def0e71a
2022-09-02 19:15:47 +03:00

107 lines
4.5 KiB
Python

import asyncio
import logging
import uvloop
from aiogrobid import GrobidClient
from aioipfs import AsyncIPFS as AsyncIPFS
from idm.api.aioclient import IdmApiGrpcClient
from library.aiogrpctools import AioGrpcServer
from library.aiopostgres import AioPostgresPoolHolder
from library.configurator import Configurator
from library.logging import configure_logging
from library.telegram.base import BaseTelegramClient
from nexus.hub.configs import get_config
from nexus.hub.services.delivery import DeliveryService
from nexus.hub.services.mutual_aid_service import MutualAidService
from nexus.hub.services.submitter import SubmitterService
from nexus.hub.user_manager import UserManager
from nexus.meta_api.aioclient import MetaApiGrpcClient
class GrpcServer(AioGrpcServer):
def __init__(self, config: Configurator):
self.log_config(config)
self.config = config
super().__init__(address=config['grpc']['address'], port=config['grpc']['port'])
self.pool_holder = AioPostgresPoolHolder(
conninfo=f'dbname={config["database"]["database"]} '
f'user={config["database"]["username"]} '
f'password={config["database"]["password"]} '
f'host={config["database"]["host"]}',
)
self.starts.append(self.pool_holder)
self.telegram_clients = {}
self.mutual_aid_services = {}
telegram_bot_config = config['telegram']['admin']
self.admin_telegram_client = BaseTelegramClient(
app_id=telegram_bot_config['app_id'],
app_hash=telegram_bot_config['app_hash'],
database=telegram_bot_config.get('database'),
mtproxy=telegram_bot_config.get('mtproxy'),
phone=telegram_bot_config['phone'],
)
for telegram_bot in config['telegram']['bots']:
telegram_bot_config = config['telegram']['bots'][telegram_bot]
telegram_client = BaseTelegramClient(
app_id=telegram_bot_config['app_id'],
app_hash=telegram_bot_config['app_hash'],
bot_token=telegram_bot_config['bot_token'],
database=telegram_bot_config.get('database'),
mtproxy=telegram_bot_config.get('mtproxy'),
)
self.telegram_clients[telegram_bot] = telegram_client
if mutual_aid_group_id := telegram_bot_config.get('mutual_aid_group_id'):
self.mutual_aid_services[telegram_bot] = MutualAidService(
admin_telegram_client=self.admin_telegram_client,
bot_telegram_client=telegram_client,
mutual_aid_group_id=mutual_aid_group_id,
)
self.starts.append(self.admin_telegram_client)
self.starts.extend(self.telegram_clients.values())
self.starts.extend(self.mutual_aid_services.values())
self.grobid_client = GrobidClient(base_url=config['grobid']['url'])
self.idm_client = IdmApiGrpcClient(endpoint=config['idm']['endpoint'])
self.ipfs_client = AsyncIPFS(host=config['ipfs']['address'], port=config['ipfs']['port'])
self.meta_api_client = MetaApiGrpcClient(endpoint=config['meta_api']['endpoint'])
self.starts.extend([self.grobid_client, self.idm_client, self.ipfs_client, self.meta_api_client])
self.user_manager = UserManager()
self.delivery_service = DeliveryService(
application=self,
service_name=config['application']['service_name'],
is_sharience_enabled=config['application']['is_sharience_enabled'],
maintenance_picture_url=config['application'].get('maintenance_picture_url', ''),
should_parse_with_grobid=config['application']['should_parse_with_grobid'],
should_store_hashes=config['application']['should_store_hashes'],
telegram_bot_configs=config['telegram']['bots'],
pylon_config=config['pylon'],
)
self.submitter_service = SubmitterService(
application=self,
service_name=config['application']['service_name'],
)
self.starts.extend([self.delivery_service, self.submitter_service])
def main():
config = get_config()
configure_logging(config)
loop = uvloop.new_event_loop()
asyncio.set_event_loop(loop)
grpc_server = GrpcServer(config)
return loop.run_until_complete(grpc_server.start_and_wait())
if __name__ == '__main__':
result = main()
logging.getLogger('debug').debug({
'action': 'exit',
'mode': 'main',
'result': str(result)
})