diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 6be9298..1a79ebc 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -43,20 +43,15 @@ jobs: run: | pytest geoarrow-pandas/tests -v -s - - name: Run doctests + - name: Run doctests (geoarrow-pyarrow) if: success() && matrix.python-version == '3.11' run: | - # Because of namespace packaging we have to add __init__.py in geoarrow and - # rebuild to avoid confusing pytest - - for pkg in pyarrow pandas; do - pushd geoarrow-$pkg - touch src/geoarrow/__init__.py - pip uninstall --yes geoarrow-$pkg - pip install . - pytest --pyargs geoarrow.$pkg --doctest-modules - popd - done + pytest --pyargs geoarrow.pyarrow --doctest-modules --import-mode=importlib + + - name: Run doctests (geoarrow-pandas) + if: success() && matrix.python-version == '3.11' + run: | + pytest --pyargs geoarrow.pandas --doctest-modules --import-mode=importlib coverage: needs: [test] diff --git a/geoarrow-pyarrow/src/geoarrow/pyarrow/__init__.py b/geoarrow-pyarrow/src/geoarrow/pyarrow/__init__.py index 11ae204..e2cbb8b 100644 --- a/geoarrow-pyarrow/src/geoarrow/pyarrow/__init__.py +++ b/geoarrow-pyarrow/src/geoarrow/pyarrow/__init__.py @@ -9,7 +9,7 @@ from geoarrow.c.lib import GeometryType, Dimensions, CoordType, EdgeType, CrsType -from ._type import ( +from geoarrow.pyarrow._type import ( VectorType, WktType, WkbType, @@ -35,11 +35,11 @@ unregister_extension_types, ) -from ._kernel import Kernel +from geoarrow.pyarrow._kernel import Kernel -from ._array import array +from geoarrow.pyarrow._array import array -from . import _scalar +from geoarrow.pyarrow import _scalar from ._compute import ( parse_all, @@ -90,5 +90,14 @@ def dataset(*args, geometry_columns=None, use_row_groups=None, **kwargs): else: return GeoDataset(parent, geometry_columns=geometry_columns) - -register_extension_types() +try: + register_extension_types() +except Exception as e: + import warnings + + warnings.warn( + "Failed to register one or more extension types.\n" + "If this warning appears from pytest, you may have to re-run with --import-mode=importlib.\n" + "You may also be able to run `unregister_extension_types()` and `register_extension_types()`.\n" + "The original error was {e}" + ) diff --git a/geoarrow-pyarrow/src/geoarrow/pyarrow/_array.py b/geoarrow-pyarrow/src/geoarrow/pyarrow/_array.py index 43e50d2..43a44f3 100644 --- a/geoarrow-pyarrow/src/geoarrow/pyarrow/_array.py +++ b/geoarrow-pyarrow/src/geoarrow/pyarrow/_array.py @@ -2,8 +2,16 @@ from geoarrow.c import lib -from ._kernel import Kernel -from ._type import WktType, WkbType, VectorType, wkb, wkt, large_wkb, large_wkt +from geoarrow.pyarrow._kernel import Kernel +from geoarrow.pyarrow._type import ( + WktType, + WkbType, + VectorType, + wkb, + wkt, + large_wkb, + large_wkt, +) class VectorArray(pa.ExtensionArray): diff --git a/geoarrow-pyarrow/src/geoarrow/pyarrow/_compute.py b/geoarrow-pyarrow/src/geoarrow/pyarrow/_compute.py index 77f9bbd..447a187 100644 --- a/geoarrow-pyarrow/src/geoarrow/pyarrow/_compute.py +++ b/geoarrow-pyarrow/src/geoarrow/pyarrow/_compute.py @@ -4,9 +4,9 @@ import pyarrow.compute as pc from geoarrow.c.lib import GeometryType, Dimensions, CoordType, EdgeType -from . import _type -from ._array import array -from ._kernel import Kernel +from geoarrow.pyarrow import _type +from geoarrow.pyarrow._array import array +from geoarrow.pyarrow._kernel import Kernel _max_workers = 1 diff --git a/geoarrow-pyarrow/src/geoarrow/pyarrow/_dataset.py b/geoarrow-pyarrow/src/geoarrow/pyarrow/_dataset.py index 1323610..2b25564 100644 --- a/geoarrow-pyarrow/src/geoarrow/pyarrow/_dataset.py +++ b/geoarrow-pyarrow/src/geoarrow/pyarrow/_dataset.py @@ -6,8 +6,8 @@ import pyarrow.compute as _compute import pyarrow.parquet as _pq from geoarrow.c.lib import CoordType -from ._type import wkt, wkb, VectorType -from ._kernel import Kernel +from geoarrow.pyarrow._type import wkt, wkb, VectorType +from geoarrow.pyarrow._kernel import Kernel class GeoDataset: diff --git a/geoarrow-pyarrow/src/geoarrow/pyarrow/_kernel.py b/geoarrow-pyarrow/src/geoarrow/pyarrow/_kernel.py index 630d7c1..c0a6c19 100644 --- a/geoarrow-pyarrow/src/geoarrow/pyarrow/_kernel.py +++ b/geoarrow-pyarrow/src/geoarrow/pyarrow/_kernel.py @@ -3,7 +3,7 @@ import pyarrow as pa from geoarrow.c import lib -from ._type import VectorType +from geoarrow.pyarrow._type import VectorType class Kernel: diff --git a/geoarrow-pyarrow/src/geoarrow/pyarrow/_scalar.py b/geoarrow-pyarrow/src/geoarrow/pyarrow/_scalar.py index c1c7505..24f73aa 100644 --- a/geoarrow-pyarrow/src/geoarrow/pyarrow/_scalar.py +++ b/geoarrow-pyarrow/src/geoarrow/pyarrow/_scalar.py @@ -1,6 +1,6 @@ import pyarrow as pa -from ._type import VectorType +from geoarrow.pyarrow._type import VectorType class VectorScalar(pa.ExtensionScalar): @@ -51,6 +51,7 @@ def scalar_cls_from_name(name): else: raise ValueError(f'Expected valid extension name but got "{name}"') + # Inject array_cls_from_name exactly once to avoid circular import if VectorType._scalar_cls_from_name is None: VectorType._scalar_cls_from_name = scalar_cls_from_name