Source code for gnomish_army_knife.runtimepy

"""
A module implementing runtimepy-related interfaces.
"""

# built-in
import asyncio
from pathlib import Path
from shutil import copytree

# third-party
from runtimepy.net.arbiter import AppInfo

# module under test
from gnomish_army_knife.net.connection import CombatLogEventConnection
from gnomish_army_knife.net.task import LogServerTask
from gnomish_army_knife.net.writer import LogWriterTask


[docs] async def peer_finish_then_copy(app: AppInfo) -> int: """A network application that doesn't do anything.""" await asyncio.gather( *(proc.protocol.exited.wait() for proc in app.peers.values()) ) task = list(app.search_tasks(LogWriterTask))[0] if task.runtime.database.matchdb_path.is_dir(): copytree( task.runtime.database.matchdb_path, Path(app.config_param("matchdb_dest", "tasks")).joinpath( "matchdb" ), dirs_exist_ok=True, ) # Ensure connection clean-up handling runs. await task.wait_iterations(2.0, count=2) return 0
[docs] async def send_all_events(app: AppInfo) -> int: """A network application that doesn't do anything.""" task = list(app.search_tasks(LogServerTask))[0] with app.log_time("Event queue initial event saturation", reminder=True): await task.queue_saturated.wait() # Relies on 'once' config. with app.log_time("Event queue fully flushed", reminder=True): while not await task.wait_for_disable(1.0): pass assert await list(app.search(kind=CombatLogEventConnection))[0].loopback() return 0