"""エントリポイント(`python -m tiasjudge`).
`QApplication` を生成してメイン画面(SPEC_01)を表示する.
ログの出力先設定はエントリポイント側の責務とする(error-handling.md「ログ」).
起動オプション:
- `--check`: 画面を生成して即終了する(起動可能性の確認用.イベントループを回さない)
"""
from __future__ import annotations
import logging
import sys
from collections.abc import Sequence
#: `--check`(イベントループを回さずに終了する)オプション
CHECK_OPTION = "--check"
#: ログの書式(診断の入出力は `core` が INFO で記録する)
LOG_FORMAT = "%(asctime)s %(levelname)s %(name)s: %(message)s"
def main(argv: Sequence[str] | None = None) -> int:
"""アプリを起動する.戻り値はプロセスの終了コード.
Args:
argv: コマンドライン引数(プログラム名を含まない).省略時は `sys.argv[1:]`.
Returns:
プロセスの終了コード(0 が正常終了).
"""
arguments = list(sys.argv[1:] if argv is None else argv)
logging.basicConfig(level=logging.INFO, format=LOG_FORMAT)
# GUI ツールキットの import は起動時のみに限定する(`core` は GUI 非依存)
from PySide6.QtWidgets import QApplication
from tiasjudge.gui.main_window import MainWindow
app = QApplication.instance() or QApplication(sys.argv[:1])
window = MainWindow()
if CHECK_OPTION in arguments:
# 画面を構築できることだけを確認して終了する(ヘッドレス環境での確認用)
window.close()
return 0
window.show()
return int(app.exec())
if __name__ == "__main__":
raise SystemExit(main())