pyrit/ui/app.py (44 lines of code) (raw):
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.
import os
import subprocess
import sys
import traceback
GLOBAL_MUTEX_NAME = "PyRIT-Gradio"
def launch_app(open_browser=False):
# Launch a new process to run the gradio UI.
# Locate the python executable and run this file.
current_path = os.path.abspath(__file__)
python_path = sys.executable
# Start a new process to run it
subprocess.Popen([python_path, current_path, str(open_browser)], creationflags=subprocess.CREATE_NEW_CONSOLE)
def is_app_running():
if sys.platform != "win32":
raise NotImplementedError("This function is only supported on Windows.")
return True
import ctypes.wintypes
SYNCHRONIZE = 0x00100000
mutex = ctypes.windll.kernel32.OpenMutexW(SYNCHRONIZE, False, GLOBAL_MUTEX_NAME)
if not mutex:
return False
# Close the handle to the mutex
ctypes.windll.kernel32.CloseHandle(mutex)
return True
if __name__ == "__main__":
def create_mutex():
if sys.platform != "win32":
raise NotImplementedError("This function is only supported on Windows.")
# TODO make sure to add cross-platform support for this.
import ctypes.wintypes
ctypes.windll.kernel32.CreateMutexW(None, False, GLOBAL_MUTEX_NAME)
last_error = ctypes.windll.kernel32.GetLastError()
if last_error == 183: # ERROR_ALREADY_EXISTS
return False
return True
if not create_mutex():
print("Gradio UI is already running.")
sys.exit(1)
print("Starting Gradio Interface please wait...")
try:
open_browser = False
if len(sys.argv) > 1:
open_browser = sys.argv[1] == "True"
from scorer import GradioApp
app = GradioApp()
app.start_gradio(open_browser=open_browser)
except: # noqa: E722
# Print the error message and traceback
print(traceback.format_exc())
input("Press Enter to exit.")