home / github

Menu
  • Search all tables
  • GraphQL API

issue_comments

Table actions
  • GraphQL API for issue_comments

5 rows where "updated_at" is on date 2022-04-22 and user = 9599 sorted by updated_at descending

✎ View and edit SQL

This data as json, CSV (advanced)

Suggested facets: issue_url, created_at (date), updated_at (date)

issue 2

  • Refactor TableView to use asyncinject 4
  • Configure git blame to ignore Black commit 1

user 1

  • simonw · 5 ✖

author_association 1

  • OWNER 5
id html_url issue_url node_id user created_at updated_at ▲ author_association body reactions issue performed_via_github_app
1106989581 https://github.com/simonw/datasette/issues/1715#issuecomment-1106989581 https://api.github.com/repos/simonw/datasette/issues/1715 IC_kwDOBm6k_c5B-1IN simonw 9599 2022-04-22T23:03:29Z 2022-04-22T23:03:29Z OWNER

I'm having second thoughts about injecting request - might be better to have the view function pull the relevant pieces out of the request before triggering the rest of the resolution.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Refactor TableView to use asyncinject 1212823665  
1106947168 https://github.com/simonw/datasette/issues/1715#issuecomment-1106947168 https://api.github.com/repos/simonw/datasette/issues/1715 IC_kwDOBm6k_c5B-qxg simonw 9599 2022-04-22T22:25:57Z 2022-04-22T22:26:06Z OWNER

```python async def database(request: Request, datasette: Datasette) -> Database: database_route = tilde_decode(request.url_vars["database"]) try: return datasette.get_database(route=database_route) except KeyError: raise NotFound("Database not found: {}".format(database_route))

async def table_name(request: Request) -> str: return tilde_decode(request.url_vars["table"]) ```

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Refactor TableView to use asyncinject 1212823665  
1106945876 https://github.com/simonw/datasette/issues/1715#issuecomment-1106945876 https://api.github.com/repos/simonw/datasette/issues/1715 IC_kwDOBm6k_c5B-qdU simonw 9599 2022-04-22T22:24:29Z 2022-04-22T22:24:29Z OWNER

Looking at the start of TableView.data():

https://github.com/simonw/datasette/blob/d57c347f35bcd8cff15f913da851b4b8eb030867/datasette/views/table.py#L333-L346

I'm going to resolve table_name and database from the URL - table_name will be a string, database will be the DB object returned by datasette.get_database(). Then those can be passed in separately too.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Refactor TableView to use asyncinject 1212823665  
1106923258 https://github.com/simonw/datasette/issues/1716#issuecomment-1106923258 https://api.github.com/repos/simonw/datasette/issues/1716 IC_kwDOBm6k_c5B-k76 simonw 9599 2022-04-22T22:02:07Z 2022-04-22T22:02:07Z OWNER

https://github.com/simonw/datasette/blame/main/datasette/views/base.py

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Configure git blame to ignore Black commit 1212838949  
1106908642 https://github.com/simonw/datasette/issues/1715#issuecomment-1106908642 https://api.github.com/repos/simonw/datasette/issues/1715 IC_kwDOBm6k_c5B-hXi simonw 9599 2022-04-22T21:47:55Z 2022-04-22T21:47:55Z OWNER

I need a asyncio.Registry with functions registered to perform the role of the table view.

Something like this perhaps: python def table_html_context(facet_results, query, datasette, rows): return {...} That then gets called like this: python async def view(request): registry = Registry(facet_results, query, datasette, rows) context = await registry.resolve(table_html, request=request, datasette=datasette) return Reponse.html(await datasette.render("table.html", context) It's also interesting to start thinking about this from a Python client library point of view. If I'm writing code outside of the HTTP request cycle, what would it look like?

One thing I could do: break out is the code that turns a request into a list of pairs extracted from the request - this code here: https://github.com/simonw/datasette/blob/8338c66a57502ef27c3d7afb2527fbc0663b2570/datasette/views/table.py#L442-L449

I could turn that into a typed dependency injection function like this:

python def filter_args(request: Request) -> List[Tuple[str, str]]: # Arguments that start with _ and don't contain a __ are # special - things like ?_search= - and should not be # treated as filters. filter_args = [] for key in request.args: if not (key.startswith("_") and "__" not in key): for v in request.args.getlist(key): filter_args.append((key, v)) return filter_args Then I can either pass a request into a .resolve() call, or I can instead skip that function by passing:

python output = registry.resolve(table_context, filter_args=[("foo", "bar")]) I do need to think about where plugins get executed in all of this.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Refactor TableView to use asyncinject 1212823665  

Advanced export

JSON shape: default, array, newline-delimited, object

CSV options:

CREATE TABLE [issue_comments] (
   [html_url] TEXT,
   [issue_url] TEXT,
   [id] INTEGER PRIMARY KEY,
   [node_id] TEXT,
   [user] INTEGER REFERENCES [users]([id]),
   [created_at] TEXT,
   [updated_at] TEXT,
   [author_association] TEXT,
   [body] TEXT,
   [reactions] TEXT,
   [issue] INTEGER REFERENCES [issues]([id])
, [performed_via_github_app] TEXT);
CREATE INDEX [idx_issue_comments_issue]
                ON [issue_comments] ([issue]);
CREATE INDEX [idx_issue_comments_user]
                ON [issue_comments] ([user]);
Powered by Datasette · Queries took 686.63ms · About: github-to-sqlite