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.
Recommended fixtures#
These are fixtures are automatically used when the plugin is enabled and pytest
is ran.
Creating temporary, test directories for:
/home/
(home_path()
)/home/${user}
(user_path()
)
Setting your home directory
Patch
$HOME
to point touser_path()
(set_home()
)
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:
- unihan_etl.pytest_plugin.unihan_project_cache_path()[source]#
Override this to destination of your choice.
- Return type:
- unihan_etl.pytest_plugin.unihan_cache_path(unihan_project_cache_path)[source]#
Override this to destination of your choice.
- unihan_etl.pytest_plugin.unihan_full_packager(unihan_full_path, unihan_full_options)[source]#
Setup a tiny portion of UNIHAN, return a UnihanOptions.
- 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
- unihan_etl.pytest_plugin.unihan_quick_zip(unihan_quick_path, unihan_quick_zip_path, unihan_quick_fixture_files)[source]#
- unihan_etl.pytest_plugin.unihan_quick_options(unihan_quick_path, unihan_quick_zip, unihan_quick_zip_path)[source]#
- unihan_etl.pytest_plugin.unihan_quick_packager(unihan_quick_path, unihan_quick_options)[source]#
Setup a tiny portion of UNIHAN, return a UnihanOptions.
- 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
- 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:
- 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:
- 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.
- unihan_etl.pytest_plugin.unihan_zshrc(unihan_user_path)[source]#
This quiets ZSH default message.
Needs a startup file .zshenv, .zprofile, .unihan_zshrc, .zlogin.
- unihan_etl.pytest_plugin.unihan_mock_test_dir(tmp_path_factory)[source]#
- Return type:
- Parameters:
tmp_path_factory (TempPathFactory) –
- unihan_etl.pytest_plugin.unihan_mock_zip_path(unihan_mock_test_dir, unihan_mock_zip_pathname)[source]#
- unihan_etl.pytest_plugin.unihan_quick_normalized_data(unihan_quick_columns, unihan_quick_fixture_files)[source]#
- 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: