From c882e9262f64e0fc7c2fc89c611bdb768c069af7 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Sat, 6 Apr 2019 20:11:08 -0700 Subject: [PATCH] display_columns_and_rows() no longer uses inspect, refs #420 --- datasette/inspect.py | 14 +------------- datasette/utils.py | 13 +++++++++++++ datasette/views/table.py | 14 ++++++-------- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/datasette/inspect.py b/datasette/inspect.py index 3ff8b367..4c498623 100644 --- a/datasette/inspect.py +++ b/datasette/inspect.py @@ -3,6 +3,7 @@ import hashlib from .utils import ( detect_spatialite, detect_fts, + detect_primary_keys, escape_sqlite, get_all_foreign_keys, table_columns, @@ -31,19 +32,6 @@ def inspect_views(conn): return [v[0] for v in conn.execute('select name from sqlite_master where type = "view"')] -def detect_primary_keys(conn, table): - " Figure out primary keys for a table. " - table_info_rows = [ - row - for row in conn.execute( - 'PRAGMA table_info("{}")'.format(table) - ).fetchall() - if row[-1] - ] - table_info_rows.sort(key=lambda row: row[-1]) - return [str(r[1]) for r in table_info_rows] - - def inspect_tables(conn, database_metadata): " List tables and their row counts, excluding uninteresting tables. " tables = {} diff --git a/datasette/utils.py b/datasette/utils.py index 50299ab7..c62e0713 100644 --- a/datasette/utils.py +++ b/datasette/utils.py @@ -475,6 +475,19 @@ def temporary_heroku_directory( os.chdir(saved_cwd) +def detect_primary_keys(conn, table): + " Figure out primary keys for a table. " + table_info_rows = [ + row + for row in conn.execute( + 'PRAGMA table_info("{}")'.format(table) + ).fetchall() + if row[-1] + ] + table_info_rows.sort(key=lambda row: row[-1]) + return [str(r[1]) for r in table_info_rows] + + def get_outbound_foreign_keys(conn, table): infos = conn.execute( 'PRAGMA foreign_key_list([{}])'.format(table) diff --git a/datasette/views/table.py b/datasette/views/table.py index 49b7ac4b..425242dc 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -11,6 +11,7 @@ from datasette.utils import ( InterruptedError, append_querystring, compound_keys_after_sql, + detect_primary_keys, escape_sqlite, filters_should_redirect, is_url, @@ -110,19 +111,16 @@ class RowTableShared(BaseView): ): "Returns columns, rows for specified table - including fancy foreign key treatment" table_metadata = self.ds.table_metadata(database, table) - info = self.ds.inspect()[database] sortable_columns = await self.sortable_columns_for_table(database, table, True) columns = [ {"name": r[0], "sortable": r[0] in sortable_columns} for r in description ] - tables = info["tables"] - table_info = tables.get(table) or {} - pks = table_info.get("primary_keys") or [] + pks = await self.ds.execute_against_connection_in_thread( + database, lambda conn: detect_primary_keys(conn, table) + ) column_to_foreign_key_table = { fk["column"]: fk["other_table"] - for fk in table_info.get( - "foreign_keys", {} - ).get("outgoing", None) or [] + for fk in await self.ds.foreign_keys_for_table(database, table) } cell_rows = [] @@ -600,7 +598,7 @@ class TableView(RowTableShared): if columns_to_expand: expanded_labels = {} - for fk, label_column in expandable_columns: + for fk, _ in expandable_columns: column = fk["column"] if column not in columns_to_expand: continue