TYPE_CHECKING,
Callable,
)
+import argparse
from dateutil.tz import (
tzlocal,
action="store_false",
help="Don't fail if a test is skipped for missing data file.",
)
+ parser.addoption("--deb-data-root-dir", action="store", help=argparse.SUPPRESS) # for internal use of the Debian CI infrastructure, may change without warning. Security note: test_pickle can run arbitrary code from this directory
def ignore_doctest_warning(item: pytest.Item, path: str, message: str) -> None:
@pytest.fixture
-def datapath(strict_data_files: str) -> Callable[..., str]:
+def datapath(strict_data_files: str, pytestconfig) -> Callable[..., str]:
"""
Get the path to a data file.
ValueError
If the path doesn't exist and the --no-strict-data-files option is not set.
"""
- BASE_PATH = os.path.join(os.path.dirname(__file__), "tests")
+ BASE_PATH = pytestconfig.getoption("--deb-data-root-dir", default=None)
+ if BASE_PATH is None:
+ BASE_PATH = os.path.join(os.path.dirname(__file__), "tests")
def deco(*args):
path = os.path.join(BASE_PATH, *args)
return env.get_template("html_table.tpl")
-def test_html_template_extends_options():
+def test_html_template_extends_options(datapath):
# make sure if templates are edited tests are updated as are setup fixtures
# to understand the dependency
- with open("pandas/io/formats/templates/html.tpl", encoding="utf-8") as file:
+ with open(datapath("../io/formats/templates/html.tpl"), encoding="utf-8") as file:
result = file.read()
assert "{% include html_style_tpl %}" in result
assert "{% include html_table_tpl %}" in result
pytest.skip("known failure on non-little endian")
# For loop for compat with --strict-data-files
- for legacy_pickle in Path(__file__).parent.glob("data/legacy_pickle/*/*.p*kl*"):
+ for legacy_pickle in Path(datapath("io", "data", "legacy_pickle")).glob("*/*.p*kl*"):
legacy_pickle = datapath(legacy_pickle)
data = pd.read_pickle(legacy_pickle)
def test_pickle_frame_v124_unpickle_130(datapath):
# GH#42345 DataFrame created in 1.2.x, unpickle in 1.3.x
path = datapath(
- Path(__file__).parent,
+ "io",
"data",
"legacy_pickle",
"1.2.4",
@pytest.fixture
-def xml_data_path():
- return Path(__file__).parent.parent / "data" / "xml"
+def xml_data_path(datapath):
+ return Path(datapath("io", "data", "xml"))
@pytest.fixture
read_xml(BytesIO(val), parser="etree")
-def test_wrong_file_path(parser):
+def test_wrong_file_path(parser, datapath):
msg = (
"Passing literal xml to 'read_xml' is deprecated and "
"will be removed in a future version. To read from a "
"literal string, wrap it in a 'StringIO' object."
)
- filename = os.path.join("data", "html", "books.xml")
+ filename = os.path.join(datapath("io", "data", "html"), "books.xml")
with pytest.raises(
FutureWarning,
@pytest.mark.parametrize("val", ["", b""])
-def test_empty_stylesheet(val):
+def test_empty_stylesheet(val, datapath):
pytest.importorskip("lxml")
msg = (
"Passing literal xml to 'read_xml' is deprecated and "
"will be removed in a future version. To read from a "
"literal string, wrap it in a 'StringIO' object."
)
- kml = os.path.join("data", "xml", "cta_rail_lines.kml")
+ kml = datapath("io", "data", "xml", "cta_rail_lines.kml")
- with pytest.raises(FutureWarning, match=msg):
- read_xml(kml, stylesheet=val)
+ read_xml(kml, stylesheet=val)
# ITERPARSE
datapath("not_a_file")
+@pytest.mark.xfail(reason="--deb-data-root-dir intentionally breaks this", strict=False)
def test_datapath(datapath):
args = ("io", "data", "csv", "iris.csv")