pytest plugin#

Download and reuse UNIHAN.zip on the fly in pytest.

Usage#

Install unihan-etl via the python package manager of your choosing, e.g.

$ pip install unihan-etl

The pytest plugin will automatically be detected via pytest, and the fixtures will be added.

Fixtures#

pytest-unihan works through providing pytest fixtures - so read up on those!

The plugin’s fixtures guarantee downloading, and then reusing UNIHAN.zip every test without needing to redownload.

Bootstrapping pytest in your conftest.py#

The most common scenario is you will want to configure the above fixtures with autouse.

Why doesn’t the plugin automatically add them? It’s part of being a decent pytest plugin and python package: explicitness.

Setting a temporary home directory#

import pytest

@pytest.fixture(autouse=True)
def setup(
    set_home: None,
):
    pass

See examples#

View unihan-etl’s own tests/

API reference#

unihan_etl.pytest_plugin.unihan_user_cache_path()[source]#

Override this to destination of your choice.

Return type:

Path

unihan_etl.pytest_plugin.unihan_project_cache_path()[source]#

Override this to destination of your choice.

Return type:

Path

unihan_etl.pytest_plugin.unihan_cache_path(unihan_project_cache_path)[source]#

Override this to destination of your choice.

Return type:

Path

Parameters:

unihan_project_cache_path (Path) –

unihan_etl.pytest_plugin.unihan_fixture_root(unihan_cache_path)[source]#
Return type:

Path

Parameters:

unihan_cache_path (Path) –

unihan_etl.pytest_plugin.unihan_full_path(unihan_fixture_root)[source]#
Return type:

Path

Parameters:

unihan_fixture_root (Path) –

unihan_etl.pytest_plugin.unihan_full_options(unihan_full_path)[source]#
Return type:

Options

Parameters:

unihan_full_path (Path) –

unihan_etl.pytest_plugin.unihan_full_packager(unihan_full_path, unihan_full_options)[source]#

Setup a tiny portion of UNIHAN, return a UnihanOptions.

Return type:

Packager

Parameters:
  • unihan_full_path (Path) –

  • unihan_full_options (Options) –

unihan_etl.pytest_plugin.unihan_ensure_full(unihan_full_path, unihan_full_options, unihan_full_packager)[source]#

Downloads and extracts a full UNIHAN, return a UnihanOptions. :rtype: None

>>> import pathlib
>>> from unihan_etl.core import Packager
>>> from unihan_etl.options import Options as UnihanOptions
>>> def test_unihan_ensure_full(
...     unihan_full_path: pathlib.Path,
...     unihan_full_options: "UnihanOptions",
...     unihan_full_packager: "Packager",
... ) -> None:
...     unihan_full_destination = unihan_full_options.destination
...     assert unihan_full_destination.exists()
...     assert unihan_full_destination.stat().st_size > 20_000_000
...
...     assert unihan_full_options.work_dir.exists()
...     unihan_readings = unihan_full_options.work_dir / 'Unihan_Readings.txt'
...     assert unihan_readings.stat().st_size > 6200000

Extending fixtures:

>>> import pathlib
>>> import pytest
>>> from unihan_etl.core import Packager
>>> from unihan_etl.options import Options as UnihanOptions
>>> @pytest.fixture
... def my_unihan(
...     unihan_full_path: pathlib.Path,
...     unihan_full_options: "UnihanOptions",
...     unihan_full_packager: "Packager",
... ) -> "Packager":
...     return unihan_full_packager
>>> def test_my_extended_unihan_Fixture(my_unihan: "Packager") -> None:
...     my_unihan.download()
...     my_unihan_destination = my_unihan.options.destination
...     if not my_unihan_destination.exists():
...         my_unihan.export()
...     assert my_unihan_destination.exists()
...     assert my_unihan_destination.stat().st_size > 20_000_000
...
...     assert my_unihan.options.work_dir.exists()
...     unihan_readings = my_unihan.options.work_dir / 'Unihan_Readings.txt'
...     assert unihan_readings.stat().st_size > 6200000
Parameters:
  • unihan_full_path (Path) –

  • unihan_full_options (Options) –

  • unihan_full_packager (Packager) –

Return type:

None

unihan_etl.pytest_plugin.unihan_quick_path(unihan_fixture_root)[source]#
Return type:

Path

Parameters:

unihan_fixture_root (Path) –

unihan_etl.pytest_plugin.unihan_quick_zip_path(unihan_quick_path)[source]#
Return type:

Path

Parameters:

unihan_quick_path (Path) –

unihan_etl.pytest_plugin.unihan_quick_zip(unihan_quick_path, unihan_quick_zip_path, unihan_quick_fixture_files)[source]#
Return type:

ZipFile

Parameters:
  • unihan_quick_path (Path) –

  • unihan_quick_zip_path (Path) –

  • unihan_quick_fixture_files (List[Path]) –

unihan_etl.pytest_plugin.unihan_quick_options(unihan_quick_path, unihan_quick_zip, unihan_quick_zip_path)[source]#
Return type:

Options

Parameters:
  • unihan_quick_path (Path) –

  • unihan_quick_zip (ZipFile) –

  • unihan_quick_zip_path (Path) –

unihan_etl.pytest_plugin.unihan_quick_packager(unihan_quick_path, unihan_quick_options)[source]#

Setup a tiny portion of UNIHAN, return a UnihanOptions.

Return type:

Packager

Parameters:
  • unihan_quick_path (Path) –

  • unihan_quick_options (Options) –

unihan_etl.pytest_plugin.unihan_ensure_quick(unihan_quick_path, unihan_quick_options, unihan_quick_packager)[source]#

Setup a tiny portion of UNIHAN, return a UnihanOptions. :rtype: None

>>> import pathlib
>>> from unihan_etl.core import Packager
>>> from unihan_etl.options import Options as UnihanOptions
>>> def test_unihan_ensure_quick(
...     unihan_quick_path: pathlib.Path,
...     unihan_quick_options: "UnihanOptions",
...     unihan_quick_packager: "Packager",
... ) -> None:
...     unihan_quick_destination = unihan_quick_options.destination
...     assert unihan_quick_destination.exists()
...     assert unihan_quick_destination.stat().st_size == 171_968
...
...     assert unihan_quick_options.work_dir.exists()
...     unihan_readings = unihan_quick_options.work_dir / 'Unihan_Readings.txt'
...     assert unihan_readings.stat().st_size == 21_631

Extending fixtures:

>>> import pathlib
>>> import pytest
>>> from unihan_etl.core import Packager
>>> from unihan_etl.options import Options as UnihanOptions
>>> @pytest.fixture
... def my_unihan(
...     unihan_quick_path: pathlib.Path,
...     unihan_quick_options: "UnihanOptions",
...     unihan_quick_packager: "Packager",
... ) -> "Packager":
...     return unihan_quick_packager
>>> def test_my_extended_unihan_Fixture(my_unihan: "Packager") -> None:
...     my_unihan.download()
...     my_unihan_destination = my_unihan.options.destination
...     if not my_unihan_destination.exists():
...         my_unihan.export()
...     assert my_unihan_destination.exists()
...     assert my_unihan_destination.stat().st_size == 171_968
...
...     assert my_unihan.options.work_dir.exists()
...     unihan_readings = my_unihan.options.work_dir / 'Unihan_Readings.txt'
...     assert unihan_readings.stat().st_size == 21631
Parameters:
  • unihan_quick_path (Path) –

  • unihan_quick_options (Options) –

  • unihan_quick_packager (Packager) –

Return type:

None

unihan_etl.pytest_plugin.unihan_bootstrap_all(unihan_ensure_full, unihan_ensure_quick)[source]#

This should be used like so in your project’s conftest.py:

>>> import pytest
>>> @pytest.fixture(scope="session", autouse=True)
:rtype: :py:obj:`None`

… def bootstrap(unihan_bootstrap_all) -> None: … return None

Parameters:
  • unihan_ensure_full (None) –

  • unihan_ensure_quick (None) –

Return type:

None

unihan_etl.pytest_plugin.unihan_home_path(tmp_path_factory)[source]#

Temporary /home/ path.

Return type:

Path

Parameters:

tmp_path_factory (TempPathFactory) –

unihan_etl.pytest_plugin.unihan_home_user_name()[source]#

Default username to set for unihan_user_path() fixture.

Return type:

str

unihan_etl.pytest_plugin.unihan_user_path(unihan_home_path, unihan_home_user_name)[source]#

Default temporary user directory.

Used by: unihan_zshrc()

Note: You will need to set the home directory, see Setting a temporary home directory.

Return type:

Path

Parameters:
  • unihan_home_path (Path) –

  • unihan_home_user_name (str) –

unihan_etl.pytest_plugin.unihan_zshrc(unihan_user_path)[source]#

This quiets ZSH default message.

Needs a startup file .zshenv, .zprofile, .unihan_zshrc, .zlogin.

Return type:

Path

Parameters:

unihan_user_path (Path) –

unihan_etl.pytest_plugin.unihan_test_options()[source]#
Return type:

Union[Options, Mapping[str, Any]]

unihan_etl.pytest_plugin.unihan_mock_zip_pathname()[source]#
Return type:

str

unihan_etl.pytest_plugin.unihan_quick_fixture_files()[source]#
Return type:

List[Path]

unihan_etl.pytest_plugin.unihan_mock_test_dir(tmp_path_factory)[source]#
Return type:

Path

Parameters:

tmp_path_factory (TempPathFactory) –

unihan_etl.pytest_plugin.unihan_mock_zip_path(unihan_mock_test_dir, unihan_mock_zip_pathname)[source]#
Return type:

Path

Parameters:
  • unihan_mock_test_dir (Path) –

  • unihan_mock_zip_pathname (str) –

unihan_etl.pytest_plugin.unihan_mock_zip(unihan_mock_zip_path, unihan_quick_data)[source]#
Return type:

ZipFile

Parameters:
  • unihan_mock_zip_path (Path) –

  • unihan_quick_data (str) –

unihan_etl.pytest_plugin.unihan_quick_columns()[source]#
Return type:

ColumnData

unihan_etl.pytest_plugin.unihan_quick_normalized_data(unihan_quick_columns, unihan_quick_fixture_files)[source]#
Return type:

UntypedNormalizedData

Parameters:
  • unihan_quick_columns (ColumnData) –

  • unihan_quick_fixture_files (List[Path]) –

unihan_etl.pytest_plugin.unihan_quick_expanded_data(unihan_quick_normalized_data)[source]#
Return type:

ExpandedExport

Parameters:

unihan_quick_normalized_data (List[Dict[str, Any]]) –

unihan_etl.pytest_plugin.unihan_quick_data()[source]#

Raw snippet excerpted from UNIHAN corpus.

>>> def test_unihan_quick_data(
...     unihan_quick_data: str,
... ) -> None:
...     assert isinstance(unihan_quick_data, str)
...
:rtype: :py:class:`str`

… assert isinstance(unihan_quick_data.splitlines()[1], str) …

Return type:

str