pkg.lib.App: Fix event loop for Python 3.14+ #59
1 changed files with 11 additions and 8 deletions
|
|
@ -84,7 +84,7 @@ class App: # export
|
|||
description: str = '',
|
||||
name_filter: str = '^Cmd.*',
|
||||
modules: list[str] | None = None,
|
||||
eloop: None = None,
|
||||
eloop: asyncio.AbstractEventLoop | None = None,
|
||||
) -> None:
|
||||
|
||||
def add_cmd_to_parser(cmd: AbstractCmd, parsers: Any) -> ArgumentParser:
|
||||
|
|
@ -171,12 +171,9 @@ class App: # export
|
|||
set_log_flags(self.__default_log_flags)
|
||||
set_log_level(self.__default_log_level)
|
||||
|
||||
self.__async_runner: AsyncRunner | None = None
|
||||
self.__eloop = eloop
|
||||
self.__own_eloop = False
|
||||
if eloop is None:
|
||||
self.__eloop = asyncio.get_event_loop()
|
||||
self.__own_eloop = True
|
||||
self.__async_runner: AsyncRunner | None = None
|
||||
|
||||
self.__parser = ArgumentParser(
|
||||
formatter_class = ArgumentDefaultsHelpFormatter,
|
||||
|
|
@ -212,12 +209,12 @@ class App: # export
|
|||
'-h', '--help', action = 'help', help = 'Show this help message and exit'
|
||||
)
|
||||
|
||||
def __del__(self) -> None:
|
||||
def close(self) -> None:
|
||||
if self.__own_eloop:
|
||||
if self.__eloop is not None:
|
||||
self.__eloop.close()
|
||||
if not self.__eloop.is_closed():
|
||||
self.__eloop.close()
|
||||
self.__eloop = None
|
||||
self.__own_eloop = False
|
||||
|
||||
async def __aenter__(self) -> None:
|
||||
pass
|
||||
|
|
@ -333,12 +330,18 @@ class App: # export
|
|||
return self.__parser
|
||||
|
||||
def run(self, argv: list[str] | None = None) -> None:
|
||||
if self.__eloop is None:
|
||||
eloop = asyncio.new_event_loop()
|
||||
asyncio.set_event_loop(eloop)
|
||||
self.__eloop = eloop
|
||||
self.__own_eloop = True
|
||||
try:
|
||||
ret = self.eloop.run_until_complete(self.__run(argv))
|
||||
finally:
|
||||
if self.__async_runner:
|
||||
self.__async_runner.close()
|
||||
self.__async_runner = None
|
||||
self.close()
|
||||
return ret
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue