From 9345a5c3246a5c956074a38021ecf693a225efa2 Mon Sep 17 00:00:00 2001 From: Ram Rachum Date: Fri, 3 May 2019 21:31:39 +0300 Subject: [PATCH] I like PathLike --- pysnooper/pycompat.py | 7 ++++++- pysnooper/pysnooper.py | 16 +++++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/pysnooper/pycompat.py b/pysnooper/pycompat.py index 357c53b..4f2a9a6 100644 --- a/pysnooper/pycompat.py +++ b/pysnooper/pycompat.py @@ -29,4 +29,9 @@ else: @classmethod def __subclasshook__(cls, subclass): - return hasattr(subclass, '__fspath__') + return ( + hasattr(subclass, '__fspath__') or + # Make a concession for older `pathlib` versions:g + (hasattr(subclass, 'open') and + 'path' in subclass.__name__.lower()) + ) diff --git a/pysnooper/pysnooper.py b/pysnooper/pysnooper.py index acd2213..27e609a 100644 --- a/pysnooper/pysnooper.py +++ b/pysnooper/pysnooper.py @@ -3,6 +3,7 @@ import sys +from .third_party import six from .third_party import decorator from . import utils @@ -22,26 +23,19 @@ def get_write_and_truncate_functions(output): truncate = None elif isinstance(output, (pycompat.PathLike, str)): def write(s): - with open(output, 'a') as output_file: + with open(six.text_type(output), 'a') as output_file: output_file.write(s) def truncate(): - with open(output, 'w') as output_file: + with open(six.text_type(output), 'w') as output_file: pass elif callable(output): write = output truncate = None - elif isinstance(output, utils.WritableStream): + else: + assert isinstance(output, utils.WritableStream) def write(s): output.write(s) truncate = None - elif hasattr(output, 'open'): - def write(s): - with output.open('a') as output_file: - output_file.write(s) - - def truncate(): - with output.open('w'): - pass return (write, truncate)