sd-webui-deforum/scripts/deforum_helpers/opts_overrider.py

30 lines
1.2 KiB
Python

import logging
from typing import Any, Dict
from modules.shared import opts
log = logging.getLogger(__name__)
class A1111OptionsOverrider(object):
def __init__(self, opts_overrides: Dict[str, Any]):
self.opts_overrides = opts_overrides
def __enter__(self):
if self.opts_overrides is not None and len(self.opts_overrides)>0:
self.original_opts = {k: opts.data[k] for k in self.opts_overrides.keys() if k in opts.data}
log.debug(f"Captured options to override: {self.original_opts}")
log.info(f"Setting options: {self.opts_overrides}")
for k, v in self.opts_overrides.items():
setattr(opts, k, v)
else:
self.original_opts = None
return self
def __exit__(self, exception_type, exception_value, traceback):
if (exception_type is not None):
log.warning(f"Error during batch execution: {exception_type} - {exception_value}")
log.debug(f"{traceback}")
if (self.original_opts is not None):
log.info(f"Restoring options: {self.original_opts}")
for k, v in self.original_opts.items():
setattr(opts, k, v)