# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. import gc import os import signal import shutil import sys import textwrap import weakref import pytest from pyarrow.util import (doc, _break_traceback_cycle_from_frame, download_tzdata_on_windows) from pyarrow.tests.util import disabled_gc @doc(method="func_a", operation="A") def func_a(whatever): """ This is the {method} method. It computes {operation}. """ pass @doc( func_a, textwrap.dedent( """ Examples -------- >>> func_b() B """ ), method="func_b", operation="B", ) def func_b(whatever): pass @doc( func_a, method="func_c", operation="C", ) def func_c(whatever): """ Examples -------- >>> func_c() C """ pass @doc(func_a, method="func_d", operation="D") def func_d(whatever): pass @doc(func_d, method="func_e", operation="E") def func_e(whatever): pass @doc(method="func_f") def func_f(whatever): """ This is the {method} method. {{ We can escape curly braces like this. }} Examples -------- We should replace curly brace usage in doctests. >>> dict(x = "x", y = "y") >>> set((1, 2, 3)) """ pass def test_docstring_formatting(): docstr = textwrap.dedent( """ This is the func_a method. It computes A. """ ) assert func_a.__doc__ == docstr def test_docstring_concatenation(): docstr = textwrap.dedent( """ This is the func_b method. It computes B. Examples -------- >>> func_b() B """ ) assert func_b.__doc__ == docstr def test_docstring_append(): docstr = textwrap.dedent( """ This is the func_c method. It computes C. Examples -------- >>> func_c() C """ ) assert func_c.__doc__ == docstr def test_docstring_template_from_callable(): docstr = textwrap.dedent( """ This is the func_d method. It computes D. """ ) assert func_d.__doc__ == docstr def test_inherit_docstring_template_from_callable(): docstr = textwrap.dedent( """ This is the func_e method. It computes E. """ ) assert func_e.__doc__ == docstr def test_escaping_in_docstring(): docstr = textwrap.dedent( """ This is the func_f method. { We can escape curly braces like this. } Examples -------- We should replace curly brace usage in doctests. >>> dict(x = "x", y = "y") >>> set((1, 2, 3)) """ ) assert func_f.__doc__ == docstr def exhibit_signal_refcycle(): # Put an object in the frame locals and return a weakref to it. # If `signal.getsignal` has a bug where it creates a reference cycle # keeping alive the current execution frames, `obj` will not be # destroyed immediately when this function returns. obj = set() signal.getsignal(signal.SIGINT) return weakref.ref(obj) def test_signal_refcycle(): # Test possible workaround for https://bugs.python.org/issue42248 with disabled_gc(): wr = exhibit_signal_refcycle() if wr() is None: pytest.skip( "Python version does not have the bug we're testing for") gc.collect() with disabled_gc(): wr = exhibit_signal_refcycle() assert wr() is not None _break_traceback_cycle_from_frame(sys._getframe(0)) assert wr() is None @pytest.mark.skipif(sys.platform != "win32", reason="Timezone database is already provided.") def test_download_tzdata_on_windows(): tzdata_path = os.path.expandvars(r"%USERPROFILE%\Downloads\tzdata") # Download timezone database and remove data in case it already exists if (os.path.exists(tzdata_path)): shutil.rmtree(tzdata_path) download_tzdata_on_windows() # Inspect the folder assert os.path.exists(tzdata_path) assert os.path.exists(os.path.join(tzdata_path, "windowsZones.xml")) assert os.path.exists(os.path.join(tzdata_path, "europe")) assert 'version' in os.listdir(tzdata_path)