|
''' |
|
Copied from: https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/14184 |
|
''' |
|
|
|
import inspect |
|
import warnings |
|
from functools import wraps |
|
|
|
import gradio as gr |
|
|
|
|
|
class GradioDeprecationWarning(DeprecationWarning): |
|
pass |
|
|
|
|
|
def repair(grclass): |
|
if not getattr(grclass, 'EVENTS', None): |
|
return |
|
|
|
@wraps(grclass.__init__) |
|
def __repaired_init__(self, *args, tooltip=None, source=None, original=grclass.__init__, **kwargs): |
|
if source: |
|
kwargs["sources"] = [source] |
|
|
|
allowed_kwargs = inspect.signature(original).parameters |
|
fixed_kwargs = {} |
|
for k, v in kwargs.items(): |
|
if k in allowed_kwargs: |
|
fixed_kwargs[k] = v |
|
else: |
|
warnings.warn(f"unexpected argument for {grclass.__name__}: {k}", GradioDeprecationWarning, stacklevel=2) |
|
|
|
original(self, *args, **fixed_kwargs) |
|
|
|
self.webui_tooltip = tooltip |
|
|
|
for event in self.EVENTS: |
|
replaced_event = getattr(self, str(event)) |
|
|
|
def fun(*xargs, _js=None, replaced_event=replaced_event, **xkwargs): |
|
if _js: |
|
xkwargs['js'] = _js |
|
|
|
return replaced_event(*xargs, **xkwargs) |
|
|
|
setattr(self, str(event), fun) |
|
|
|
grclass.__init__ = __repaired_init__ |
|
grclass.update = gr.update |
|
|
|
|
|
for component in set(gr.components.__all__ + gr.layouts.__all__): |
|
repair(getattr(gr, component, None)) |
|
|
|
|
|
class Dependency(gr.events.Dependency): |
|
def __init__(self, *args, **kwargs): |
|
super().__init__(*args, **kwargs) |
|
|
|
def then(*xargs, _js=None, **xkwargs): |
|
if _js: |
|
xkwargs['js'] = _js |
|
|
|
return original_then(*xargs, **xkwargs) |
|
|
|
original_then = self.then |
|
self.then = then |
|
|
|
|
|
gr.events.Dependency = Dependency |
|
|
|
gr.Box = gr.Group |
|
|