from server import PromptServer from aiohttp import web import time class ChooserCancelled(Exception): pass class ChooserMessage: stash = {} messages = {} cancelled = False @classmethod def addMessage(cls, id, message): if message == '__cancel__': cls.messages = {} cls.cancelled = True elif message == '__start__': cls.messages = {} cls.stash = {} cls.cancelled = False else: cls.messages[str(id)] = message @classmethod def waitForMessage(cls, id, period=0.1, asList=False): sid = str(id) while not (sid in cls.messages) and not ("-1" in cls.messages): if cls.cancelled: cls.cancelled = False raise ChooserCancelled() time.sleep(period) if cls.cancelled: cls.cancelled = False raise ChooserCancelled() message = cls.messages.pop(str(id), None) or cls.messages.pop("-1") try: if asList: return [int(x.strip()) for x in message.split(",")] else: return int(message.strip()) except ValueError: print( f"ERROR IN IMAGE_CHOOSER - failed to parse '${message}' as ${'comma separated list of ints' if asList else 'int'}") return [1] if asList else 1 @PromptServer.instance.routes.post('/easyuse/image_chooser_message') async def make_image_selection(request): post = await request.post() ChooserMessage.addMessage(post.get("id"), post.get("message")) return web.json_response({})