Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposed code to fix issue #2198 finding the spatialite dll in Windows #2339

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions datasette/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -873,6 +873,15 @@ class LoadExtension(click.ParamType):
name = "path:entrypoint?"

def convert(self, value, param, ctx):
#:\ indicates we're on a Windows machine study the argument a bit more
if ":\\" in r"%r" % value:
path_entry = value.split(":", 2)
if len(path_entry) < 3:
return value
# argument contains a Windows/DOS path and an entry point
path = path_entry[0] + ":" + path_entry[1]
entrypoint = path_entry[-1]
return path, entrypoint
if ":" not in value:
Comment on lines +876 to 885
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There may be something in the Python standard library - perhaps in the os module - that can handle this here.

return value
path, entrypoint = value.split(":", 1)
Expand Down
5 changes: 5 additions & 0 deletions docs/spatialite.rst
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ Depending on your distribution, you should be able to run Datasette something li

If you are unsure of the location of the module, try running ``locate mod_spatialite`` and see what comes back.

Installing SpatiaLite on Windows
-----------------------------

For Windows, you may find binaries on the `Gaia-SINS <https://www.gaia-gis.it/gaia-sins/>`_ home page.

Spatial indexing latitude/longitude columns
===========================================

Expand Down
31 changes: 31 additions & 0 deletions tests/test_loadextension.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from datasette.utils import LoadExtension


def test_dos_path():
path_string = "C:\Windows\System32\mod_spatialite.dll"
le = LoadExtension()
path = le.convert(path_string, None, None)
assert path == "C:\Windows\System32\mod_spatialite.dll"


def test_dos_pathentry():
path_entry = "C:\Windows\System32\mod_spatialite.dll:testentry"
le = LoadExtension()
pathen, entry = le.convert(path_entry, None, None)
assert pathen == "C:\Windows\System32\mod_spatialite.dll"
assert entry == "testentry"


def test_linux_path():
path_string = "/base/test/test2"
le = LoadExtension()
path = le.convert(path_string, None, None)
assert path == path_string


def test_linux_path_entry():
path_string = "/base/test/test2:testentry"
le = LoadExtension()
path, entry = le.convert(path_string, None, None)
assert path == "/base/test/test2"
assert entry == "testentry"
Loading