|
1 | 1 | from datasette.filters import Filters
|
| 2 | +from datasette.utils.asgi import Request |
2 | 3 | import graphene
|
3 | 4 | import urllib
|
4 | 5 | import sqlite_utils
|
@@ -64,22 +65,23 @@ class Repos(graphene.ObjectType):
|
64 | 65 | edges = graphene.List(RepoEdge)
|
65 | 66 |
|
66 | 67 | def resolve_totalCount(parent, info):
|
67 |
| - return len(parent) |
| 68 | + return parent["filtered_table_rows_count"] |
68 | 69 |
|
69 | 70 | def resolve_nodes(parent, info):
|
70 |
| - return parent |
| 71 | + return parent["rows"] |
71 | 72 |
|
72 | 73 | def resolve_edges(parent, info):
|
| 74 | + print("resolve edges", parent["rows"]) |
73 | 75 | return [
|
74 | 76 | {"cursor": path_from_row_pks(row, ["id"], use_rowid=False), "node": row}
|
75 |
| - for row in parent |
| 77 | + for row in parent["rows"] |
76 | 78 | ]
|
77 | 79 |
|
78 | 80 | def resolve_pageInfo(parent, info):
|
79 |
| - last_row = parent[-1] |
| 81 | + last_row = parent["rows"][-1] |
80 | 82 | 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, |
83 | 85 | }
|
84 | 86 |
|
85 | 87 |
|
@@ -173,22 +175,37 @@ async def resolve_repos(root, info, filters=None, first=None, after=None):
|
173 | 175 | first = 10
|
174 | 176 | table_name = "repos"
|
175 | 177 | print("filters=", filters, "first=", first)
|
176 |
| - where_clause = "" |
177 |
| - params = {} |
| 178 | + |
| 179 | + pairs = [] |
178 | 180 | if filters:
|
179 | 181 | 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 |
189 | 200 | )
|
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 |
192 | 209 |
|
193 | 210 | to_add.append(("resolve_repos", resolve_repos))
|
194 | 211 |
|
|
0 commit comments