Add hereditary option to as_object_map. This automatically apply as_object_map to the values of the map when the values are "plain old objects".

This behavior is slightly naive but I think it will satisfy most people who have requested this feature.


- [x] Add a [CHANGELOG](https://github.com/pyodide/pyodide/blob/main/docs/project/changelog.md) entry
- [x] Add / update tests
- [x] Add new / update outdated documentation

import pathlib

import pytest
from pytest_pyodide import run_in_pyodide

TEST_DATA_PATH = pathlib.Path(__file__).parent / "test_data"


@pytest.mark.driver_timeout(60)
@run_in_pyodide(packages=["fiona"])
def test_supported_drivers(selenium):
    import fiona

    assert fiona.driver_count() > 0


@pytest.mark.driver_timeout(60)
def test_runtest(selenium):
    @run_in_pyodide(packages=["fiona", "pytest"])
    def _run(selenium, data):
        import zipfile

        with open("tests.zip", "wb") as f:
            f.write(data)

        with zipfile.ZipFile("tests.zip", "r") as zf:
            zf.extractall("tests")

        import sys

        sys.path.append("tests")

        import pytest

        def runtest(test_filter, ignore_filters):
            ignore_filter = []
            for ignore in ignore_filters:
                ignore_filter.append("--ignore-glob")
                ignore_filter.append(ignore)

            ret = pytest.main(
                [
                    "--pyargs",
                    "tests",
                    "--continue-on-collection-errors",
                    # "-v",
                    *ignore_filter,
                    "-k",
                    test_filter,
                ]
            )
            assert ret == 0

        runtest(
            (
                "not ordering "  # hangs
                "and not env "  # No module named "boto3"
                "and not slice "  # GML file format not supported
                "and not GML "  # GML file format not supported
                "and not TestNonCountingLayer "  # GPX file format not supported
                "and not test_schema_default_fields_wrong_type "  # GPX file format not supported
                "and not http "
                "and not FlatGeobuf"  # assertion error
            ),
            [
                "tests/test_fio*",  # no CLI tests
                "tests/test_data_paths.py",  # no CLI tests
                "tests/test_datetime.py",  # no CLI tests
                "tests/test_vfs.py",  # No module named "boto3"
            ],
        )

    TEST_DATA = (TEST_DATA_PATH / "fiona-tests-1.8.21.zip").read_bytes()
    _run(selenium, TEST_DATA)

import pathlib

import pytest
from pytest_pyodide import run_in_pyodide

TEST_DATA_PATH = pathlib.Path(__file__).parent / "test_data"


@pytest.mark.driver_timeout(60)
@run_in_pyodide(packages=["fiona"])
def test_supported_drivers(selenium):
    import fiona

    assert fiona.driver_count() > 0


@pytest.mark.driver_timeout(60)
def test_runtest(selenium):
    @run_in_pyodide(packages=["fiona", "pytest"])
    def _run(selenium, data):
        import zipfile

        with open("tests.zip", "wb") as f:
            f.write(data)

        with zipfile.ZipFile("tests.zip", "r") as zf:
            zf.extractall("tests")

        import sys

        sys.path.append("tests")

        import pytest

        def runtest(test_filter, ignore_filters):
            ignore_filter = []
            for ignore in ignore_filters:
                ignore_filter.append("--ignore-glob")
                ignore_filter.append(ignore)

            ret = pytest.main(
                [
                    "--pyargs",
                    "tests",
                    "--continue-on-collection-errors",
                    # "-v",
                    *ignore_filter,
                    "-k",
                    test_filter,
                ]
            )
            assert ret == 0

        runtest(
            (
                "not ordering "  # hangs
                "and not env "  # No module named "boto3"
                "and not slice "  # GML file format not supported
                "and not GML "  # GML file format not supported
                "and not TestNonCountingLayer "  # GPX file format not supported
                "and not test_schema_default_fields_wrong_type "  # GPX file format not supported
                "and not http "
                "and not FlatGeobuf"  # assertion error
            ),
            [
                "tests/test_fio*",  # no CLI tests
                "tests/test_data_paths.py",  # no CLI tests
                "tests/test_datetime.py",  # no CLI tests
                "tests/test_vfs.py",  # No module named "boto3"
            ],
        )

    TEST_DATA = (TEST_DATA_PATH / "fiona-tests-1.8.21.zip").read_bytes()
    _run(selenium, TEST_DATA)
