Skip to content

Commit 8e47e00

Browse files
committed
Tidy SilenceWarnings context manager:
- Fix type errors - Enable SilenceWarnings to be used as both a context manager and a decorator - Remove duplicate implementation - Check the initial verbosity on __enter__() rather than __init__()
1 parent d13aafb commit 8e47e00

File tree

3 files changed

+21
-35
lines changed

3 files changed

+21
-35
lines changed

invokeai/backend/model_manager/probe.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import invokeai.backend.util.logging as logger
1111
from invokeai.app.util.misc import uuid_string
1212
from invokeai.backend.model_hash.model_hash import HASHING_ALGORITHMS, ModelHash
13-
from invokeai.backend.util.util import SilenceWarnings
13+
from invokeai.backend.util.silence_warnings import SilenceWarnings
1414

1515
from .config import (
1616
AnyModelConfig,
Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,36 @@
1-
"""Context class to silence transformers and diffusers warnings."""
2-
31
import warnings
4-
from typing import Any
2+
from contextlib import ContextDecorator
53

6-
from diffusers import logging as diffusers_logging
4+
from diffusers.utils import logging as diffusers_logging
75
from transformers import logging as transformers_logging
86

97

10-
class SilenceWarnings(object):
11-
"""Use in context to temporarily turn off warnings from transformers & diffusers modules.
8+
# Inherit from ContextDecorator to allow using SilenceWarnings as both a context manager and a decorator.
9+
class SilenceWarnings(ContextDecorator):
10+
"""A context manager that disables warnings from transformers & diffusers modules while active.
1211
12+
As context manager:
13+
```
1314
with SilenceWarnings():
1415
# do something
15-
"""
16+
```
1617
17-
def __init__(self) -> None:
18-
self.transformers_verbosity = transformers_logging.get_verbosity()
19-
self.diffusers_verbosity = diffusers_logging.get_verbosity()
18+
As decorator:
19+
```
20+
@SilenceWarnings()
21+
def some_function():
22+
# do something
23+
```
24+
"""
2025

2126
def __enter__(self) -> None:
27+
self._transformers_verbosity = transformers_logging.get_verbosity()
28+
self._diffusers_verbosity = diffusers_logging.get_verbosity()
2229
transformers_logging.set_verbosity_error()
2330
diffusers_logging.set_verbosity_error()
2431
warnings.simplefilter("ignore")
2532

26-
def __exit__(self, *args: Any) -> None:
27-
transformers_logging.set_verbosity(self.transformers_verbosity)
28-
diffusers_logging.set_verbosity(self.diffusers_verbosity)
33+
def __exit__(self, *args) -> None:
34+
transformers_logging.set_verbosity(self._transformers_verbosity)
35+
diffusers_logging.set_verbosity(self._diffusers_verbosity)
2936
warnings.simplefilter("default")

invokeai/backend/util/util.py

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,9 @@
33
import os
44
import re
55
import unicodedata
6-
import warnings
76
from pathlib import Path
87

9-
from diffusers import logging as diffusers_logging
108
from PIL import Image
11-
from transformers import logging as transformers_logging
129

1310
# actual size of a gig
1411
GIG = 1073741824
@@ -80,21 +77,3 @@ def __enter__(self):
8077

8178
def __exit__(self, *args):
8279
os.chdir(self.original)
83-
84-
85-
class SilenceWarnings(object):
86-
"""Context manager to temporarily lower verbosity of diffusers & transformers warning messages."""
87-
88-
def __enter__(self):
89-
"""Set verbosity to error."""
90-
self.transformers_verbosity = transformers_logging.get_verbosity()
91-
self.diffusers_verbosity = diffusers_logging.get_verbosity()
92-
transformers_logging.set_verbosity_error()
93-
diffusers_logging.set_verbosity_error()
94-
warnings.simplefilter("ignore")
95-
96-
def __exit__(self, type, value, traceback):
97-
"""Restore logger verbosity to state before context was entered."""
98-
transformers_logging.set_verbosity(self.transformers_verbosity)
99-
diffusers_logging.set_verbosity(self.diffusers_verbosity)
100-
warnings.simplefilter("default")

0 commit comments

Comments
 (0)