Skip to content

Commit 03da489

Browse files
committed
Got pagination working via TableView.data, refs #2
1 parent ff48a6f commit 03da489

File tree

1 file changed

+36
-19
lines changed

1 file changed

+36
-19
lines changed

datasette_graphql/utils.py

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datasette.filters import Filters
2+
from datasette.utils.asgi import Request
23
import graphene
34
import urllib
45
import sqlite_utils
@@ -64,22 +65,23 @@ class Repos(graphene.ObjectType):
6465
edges = graphene.List(RepoEdge)
6566

6667
def resolve_totalCount(parent, info):
67-
return len(parent)
68+
return parent["filtered_table_rows_count"]
6869

6970
def resolve_nodes(parent, info):
70-
return parent
71+
return parent["rows"]
7172

7273
def resolve_edges(parent, info):
74+
print("resolve edges", parent["rows"])
7375
return [
7476
{"cursor": path_from_row_pks(row, ["id"], use_rowid=False), "node": row}
75-
for row in parent
77+
for row in parent["rows"]
7678
]
7779

7880
def resolve_pageInfo(parent, info):
79-
last_row = parent[-1]
81+
last_row = parent["rows"][-1]
8082
return {
81-
"endCursor": path_from_row_pks(last_row, ["id"], use_rowid=False),
82-
"hasNextPage": False,
83+
"endCursor": parent["next"],
84+
"hasNextPage": parent["next"] is not None,
8385
}
8486

8587

@@ -173,22 +175,37 @@ async def resolve_repos(root, info, filters=None, first=None, after=None):
173175
first = 10
174176
table_name = "repos"
175177
print("filters=", filters, "first=", first)
176-
where_clause = ""
177-
params = {}
178+
179+
pairs = []
178180
if filters:
179181
pairs = [f.split("=", 1) for f in filters]
180-
print(" pairs = ", pairs)
181-
filter_obj = Filters(pairs)
182-
where_clause_bits, params = filter_obj.build_where_clauses(table_name)
183-
print(" where_clause_bits={}, params={}".format(where_clause_bits, params))
184-
where_clause = " where " + " and ".join(where_clause_bits)
185-
print("select * from [{}]{}".format(table_name, where_clause), params)
186-
results = await db.execute(
187-
"select * from [{}]{} limit {}".format(table_name, where_clause, first),
188-
params,
182+
183+
# Construct a fake request and send it through TableView
184+
from datasette.views.table import TableView
185+
186+
qs = {}
187+
qs.update(pairs)
188+
if after:
189+
qs["_next"] = after
190+
qs["_size"] = first
191+
path_with_query_string = "/{}/{}.json?{}".format(
192+
"github", table_name, urllib.parse.urlencode(qs)
193+
)
194+
print(path_with_query_string)
195+
request = Request.fake(path_with_query_string)
196+
197+
view = TableView(datasette)
198+
data, _, _ = await view.data(
199+
request, database="github", hash=None, table=table_name, _next=after
189200
)
190-
print("len", len(results.rows))
191-
return [dict(row) for row in results.rows]
201+
202+
import json
203+
204+
print()
205+
print(json.dumps(data, indent=4, default=repr))
206+
print()
207+
data["rows"] = [dict(r) for r in data["rows"]]
208+
return data
192209

193210
to_add.append(("resolve_repos", resolve_repos))
194211

0 commit comments

Comments
 (0)