From da41daa168af8f29a1beb5278aed833cf3dc48ce Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Wed, 15 Aug 2018 17:51:46 -0700 Subject: [PATCH] Import pysqlite3 if available, closes #360 --- datasette/app.py | 2 +- datasette/inspect.py | 9 +++++++-- datasette/utils.py | 6 +++++- datasette/views/base.py | 2 +- datasette/views/table.py | 2 +- tests/fixtures.py | 2 +- tests/test_inspect.py | 2 +- tests/test_utils.py | 3 +-- 8 files changed, 18 insertions(+), 10 deletions(-) diff --git a/datasette/app.py b/datasette/app.py index 4f51154a..7fd7b2cc 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -4,7 +4,6 @@ import collections import hashlib import itertools import os -import sqlite3 import sys import threading import traceback @@ -33,6 +32,7 @@ from .utils import ( escape_sqlite, get_plugins, module_from_path, + sqlite3, sqlite_timelimit, to_css_class ) diff --git a/datasette/inspect.py b/datasette/inspect.py index 1f35fa66..42e7aeff 100644 --- a/datasette/inspect.py +++ b/datasette/inspect.py @@ -1,7 +1,12 @@ import hashlib -import sqlite3 -from .utils import detect_spatialite, detect_fts, escape_sqlite, get_all_foreign_keys +from .utils import ( + detect_spatialite, + detect_fts, + escape_sqlite, + get_all_foreign_keys, + sqlite3 +) HASH_BLOCK_SIZE = 1024 * 1024 diff --git a/datasette/utils.py b/datasette/utils.py index 29360b35..568c9abc 100644 --- a/datasette/utils.py +++ b/datasette/utils.py @@ -9,13 +9,17 @@ import os import pkg_resources import re import shlex -import sqlite3 import tempfile import time import shutil import urllib import numbers +try: + import pysqlite3 as sqlite3 +except ImportError: + import sqlite3 + # From https://www.sqlite.org/lang_keywords.html reserved_words = set(( 'abort action add after all alter analyze and as asc attach autoincrement ' diff --git a/datasette/views/base.py b/datasette/views/base.py index a9ed9e93..7484c791 100644 --- a/datasette/views/base.py +++ b/datasette/views/base.py @@ -2,7 +2,6 @@ import asyncio import csv import json import re -import sqlite3 import time import urllib @@ -25,6 +24,7 @@ from datasette.utils import ( path_with_format, remove_infinites, resolve_table_and_format, + sqlite3, to_css_class, value_as_boolean, ) diff --git a/datasette/views/table.py b/datasette/views/table.py index 9c180db9..bafe04be 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -1,4 +1,3 @@ -import sqlite3 import urllib import jinja2 @@ -19,6 +18,7 @@ from datasette.utils import ( path_with_added_args, path_with_removed_args, path_with_replaced_args, + sqlite3, to_css_class, urlsafe_components, value_as_boolean, diff --git a/tests/fixtures.py b/tests/fixtures.py index 8f4b50dd..f1b8bca4 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -1,10 +1,10 @@ from datasette.app import Datasette +from datasette.utils import sqlite3 import itertools import json import os import pytest import random -import sqlite3 import sys import string import tempfile diff --git a/tests/test_inspect.py b/tests/test_inspect.py index d6a9b077..d6b4e30f 100644 --- a/tests/test_inspect.py +++ b/tests/test_inspect.py @@ -1,7 +1,7 @@ from datasette.app import Datasette +from datasette.utils import sqlite3 import os import pytest -import sqlite3 import tempfile diff --git a/tests/test_utils.py b/tests/test_utils.py index 50799b2e..43e2f44b 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -7,7 +7,6 @@ import json import os import pytest from sanic.request import Request -import sqlite3 import tempfile from unittest.mock import patch @@ -228,7 +227,7 @@ def test_detect_fts(): CREATE VIRTUAL TABLE "Street_Tree_List_fts" USING FTS4 ("qAddress", "qCaretaker", "qSpecies", content="Street_Tree_List"); CREATE VIRTUAL TABLE r USING rtree(a, b, c); ''' - conn = sqlite3.connect(':memory:') + conn = utils.sqlite3.connect(':memory:') conn.executescript(sql) assert None is utils.detect_fts(conn, 'Dumb_Table') assert None is utils.detect_fts(conn, 'Test_View')