From af86b17acf2fa50048e38b96497636d49db89766 Mon Sep 17 00:00:00 2001 From: Chris Amico Date: Thu, 3 Feb 2022 21:25:06 -0500 Subject: [PATCH] Consolidate pytest marks. Copy edit docs. --- sqlite_utils/db.py | 25 ++++++++++++++----------- tests/test_gis.py | 35 ++++++++++------------------------- 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index 7c191b1..d491006 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -6,6 +6,7 @@ from .utils import ( types_for_column_types, column_affinity, progressbar, + find_spatialite, ) from collections import namedtuple from collections.abc import Mapping @@ -930,13 +931,13 @@ class Database: sql += " [{}]".format(name) self.execute(sql) - def init_spatialite(self, path: str) -> bool: + def init_spatialite(self, path: str = None) -> bool: """ - The ``init_spatialite`` method will load and initialize the Spatialite extension. + The ``init_spatialite`` method will load and initialize the SpatiaLite extension. The ``path`` argument should be an absolute path to the compiled extension, which can be found using ``find_spatialite``. - Returns true if Spatialite was successfully initialized. + Returns true if SpatiaLite was successfully initialized. .. code-block:: python @@ -946,7 +947,7 @@ class Database: db = Database("mydb.db") db.init_spatialite(find_spatialite()) - If you've installed Spatialite somewhere unexpected (for testing an alternate version, for example) + If you've installed SpatiaLite somewhere unexpected (for testing an alternate version, for example) you can pass in an absolute path: .. code-block:: python @@ -958,6 +959,9 @@ class Database: db.init_spatialite("./local/mod_spatialite.dylib") """ + if path is None: + path = find_spatialite() + self.conn.enable_load_extension(True) self.conn.load_extension(path) # Initialize SpatiaLite if not yet initialized @@ -3057,12 +3061,12 @@ class Table(Queryable): not_null: bool = False, ) -> bool: """ - In Spatialite, a geometry column can only be added to an existing table. + In SpatiaLite, a geometry column can only be added to an existing table. To do so, use ``table.add_geometry_column``, passing in a geometry type. - By default, this will add a nullable column called ``geometry`` using - `SRID 4326 `__. These can be customized using - the ``column_name`` and ``srid`` arguments. + By default, this will add a nullable column using + `SRID 4326 `__. This can + be customized using the ``column_name``, ``srid`` and ``not_null`` arguments. Returns True if the column was successfully added, False if not. @@ -3097,15 +3101,14 @@ class Table(Queryable): def create_spatial_index(self, column_name) -> bool: """ A spatial index allows for significantly faster bounding box queries. - To create one, use ``create_spatial_index`` with a :ref:`table ` - and the name of an existing geometry column. + To create one, use ``create_spatial_index`` with the name of an existing geometry column. Returns ``True`` if the index was successfully created, ``False`` if not. Calling this function if an index already exists is a no-op. .. code-block:: python - # assuming Spatialite is loaded, create the table, add the column + # assuming SpatiaLite is loaded, create the table, add the column table = db["locations"].create({"name": str}) table.add_geometry_column("geometry", "POINT") diff --git a/tests/test_gis.py b/tests/test_gis.py index 90804a3..3bf0d5f 100644 --- a/tests/test_gis.py +++ b/tests/test_gis.py @@ -3,22 +3,22 @@ from sqlite_utils.utils import find_spatialite from sqlite_utils.db import Database from sqlite_utils.utils import sqlite3 +pytestmark = [ + pytest.mark.skipif( + not find_spatialite(), reason="Could not find SpatiaLite extension" + ), + pytest.mark.skipif( + not hasattr(sqlite3.Connection, "enable_load_extension"), + reason="sqlite3.Connection missing enable_load_extension", + ), +] + -@pytest.mark.skipif(not find_spatialite(), reason="Could not find SpatiaLite extension") -@pytest.mark.skipif( - not hasattr(sqlite3.Connection, "enable_load_extension"), - reason="sqlite3.Connection missing enable_load_extension", -) def test_find_spatialite(): spatialite = find_spatialite() assert spatialite is None or isinstance(spatialite, str) -@pytest.mark.skipif(not find_spatialite(), reason="Could not find SpatiaLite extension") -@pytest.mark.skipif( - not hasattr(sqlite3.Connection, "enable_load_extension"), - reason="sqlite3.Connection missing enable_load_extension", -) def test_init_spatialite(): db = Database(memory=True) spatialite = find_spatialite() @@ -26,11 +26,6 @@ def test_init_spatialite(): assert "spatial_ref_sys" in db.table_names() -@pytest.mark.skipif(not find_spatialite(), reason="Could not find SpatiaLite extension") -@pytest.mark.skipif( - not hasattr(sqlite3.Connection, "enable_load_extension"), - reason="sqlite3.Connection missing enable_load_extension", -) def test_add_geometry_column(): db = Database(memory=True) spatialite = find_spatialite() @@ -55,11 +50,6 @@ def test_add_geometry_column(): } -@pytest.mark.skipif(not find_spatialite(), reason="Could not find SpatiaLite extension") -@pytest.mark.skipif( - not hasattr(sqlite3.Connection, "enable_load_extension"), - reason="sqlite3.Connection missing enable_load_extension", -) def test_create_spatial_index(): db = Database(memory=True) spatialite = find_spatialite() @@ -75,11 +65,6 @@ def test_create_spatial_index(): assert "idx_locations_geometry" in db.table_names() -@pytest.mark.skipif(not find_spatialite(), reason="Could not find SpatiaLite extension") -@pytest.mark.skipif( - not hasattr(sqlite3.Connection, "enable_load_extension"), - reason="sqlite3.Connection missing enable_load_extension", -) def test_double_create_spatial_index(): db = Database(memory=True) spatialite = find_spatialite()