Args: Context manager to capture `logging` streams logger: 'logging` logger object Returns: The captured output is available via `self.out` Example: ```python >>> from diffusers import logging >>> from diffusers.testing_utils import CaptureLogger >>>
| 763 | |
| 764 | |
| 765 | class CaptureLogger: |
| 766 | """ |
| 767 | Args: |
| 768 | Context manager to capture `logging` streams |
| 769 | logger: 'logging` logger object |
| 770 | Returns: |
| 771 | The captured output is available via `self.out` |
| 772 | Example: |
| 773 | ```python |
| 774 | >>> from diffusers import logging |
| 775 | >>> from diffusers.testing_utils import CaptureLogger |
| 776 | |
| 777 | >>> msg = "Testing 1, 2, 3" |
| 778 | >>> logging.set_verbosity_info() |
| 779 | >>> logger = logging.get_logger("diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.py") |
| 780 | >>> with CaptureLogger(logger) as cl: |
| 781 | ... logger.info(msg) |
| 782 | >>> assert cl.out, msg + "\n" |
| 783 | ``` |
| 784 | """ |
| 785 | |
| 786 | def __init__(self, logger): |
| 787 | self.logger = logger |
| 788 | self.io = StringIO() |
| 789 | self.sh = logging.StreamHandler(self.io) |
| 790 | self.out = "" |
| 791 | |
| 792 | def __enter__(self): |
| 793 | self.logger.addHandler(self.sh) |
| 794 | return self |
| 795 | |
| 796 | def __exit__(self, *exc): |
| 797 | self.logger.removeHandler(self.sh) |
| 798 | self.out = self.io.getvalue() |
| 799 | |
| 800 | def __repr__(self): |
| 801 | return f"captured: {self.out}\n" |
| 802 | |
| 803 | |
| 804 | def enable_full_determinism(): |
no outgoing calls