issue_comments
12 rows where issue = 459587155
This data as json, CSV (advanced)
Suggested facets: created_at (date), updated_at (date)
id ▼ | html_url | issue_url | node_id | user | created_at | updated_at | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
504762769 | https://github.com/simonw/datasette/pull/518#issuecomment-504762769 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc2Mjc2OQ== | simonw 9599 | 2019-06-23T15:37:26Z | 2019-06-23T15:37:26Z | OWNER | This is strange: on my local machine `http://127.0.0.1:8001/fixtures/table%2Fwith%2Fslashes.csv` is returning a 404 BUT there's a test for that which is passing under pytest: https://github.com/simonw/datasette/blob/d60fbfcae2658e71cab6d7b3b9f53f8d895064ef/tests/test_api.py#L721-L727 | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504762887 | https://github.com/simonw/datasette/pull/518#issuecomment-504762887 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc2Mjg4Nw== | simonw 9599 | 2019-06-23T15:38:58Z | 2019-06-23T15:38:58Z | OWNER | Mystery solved: that's because I'm constructing my own scope object and testing via `ApplicationCommunicator` rather than exercising Uvicorn directly. https://github.com/simonw/datasette/blob/d60fbfcae2658e71cab6d7b3b9f53f8d895064ef/tests/fixtures.py#L42-L57 I don't want to introduce the complexity of launching a real Uvicorn as part of the tests, so I guess I'll have to carefully update my `ApplicationCommunicator` test harness to more correctly emulate real life. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504765018 | https://github.com/simonw/datasette/pull/518#issuecomment-504765018 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc2NTAxOA== | simonw 9599 | 2019-06-23T16:03:20Z | 2019-06-23T16:03:20Z | OWNER | Weird new bug: http://127.0.0.1:8001/fixtures/table%2Fwith%2Fslashes.csv?_format=json is downloading CSV for me now. https://latest.datasette.io/fixtures/table%2Fwith%2Fslashes.csv?_format=json does the right thing. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504765145 | https://github.com/simonw/datasette/pull/518#issuecomment-504765145 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc2NTE0NQ== | simonw 9599 | 2019-06-23T16:04:37Z | 2019-06-23T16:04:37Z | OWNER | Another bug: JSON is being served without a content-type header: ``` ~ $ curl -i 'http://127.0.0.1:8001/fivethirtyeight/ahca-polls%2Fahca_polls.json' HTTP/1.1 200 OK date: Sun, 23 Jun 2019 16:04:01 GMT server: uvicorn referrer-policy: no-referrer transfer-encoding: chunked {"database": "fivethirtyeight", "table": "ahca-polls/ahca_polls", ... ``` | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504765738 | https://github.com/simonw/datasette/pull/518#issuecomment-504765738 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc2NTczOA== | simonw 9599 | 2019-06-23T16:11:49Z | 2019-06-23T16:20:44Z | OWNER | OK, for **Get ?_trace=1 working again**. The old code lives in two places: https://github.com/simonw/datasette/blob/35429f90894321eda7f2db31b9ea7976f31f73ac/datasette/app.py#L546-L560 And then: https://github.com/simonw/datasette/blob/35429f90894321eda7f2db31b9ea7976f31f73ac/datasette/app.py#L653-L672 So it's stashing something on the request to tell the rest of the code it should be tracing, then using that collected data from the request to add information to the final body. One possible shape for the replacement is a new ASGI middleware that wraps everything else. We don't have a mutable request object here though, so we will need to untangle this entirely from the request object. Also tricky is that in ASGI land we handle streams - we don't usually wait around for the entire response body to be compiled for us. This means the code that modifies the response (adding to the JSON or appending inside the `</body>`) needs to be reconsidered. As usual, Starlette seems to have figured this out: https://github.com/encode/starlette/blob/8c8cc2ec0a5cb834a9a15b871ae8b480503abb67/starlette/middleware/gzip.py | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504782618 | https://github.com/simonw/datasette/pull/518#issuecomment-504782618 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc4MjYxOA== | simonw 9599 | 2019-06-23T20:05:44Z | 2019-06-23T20:05:59Z | OWNER | **Replacement for @app.listener("before_server_start")** - this is what the [ASGI lifespan protocol](https://asgi.readthedocs.io/en/latest/specs/lifespan.html) is for. I know Uvicorn supports this because it keeps saying `ASGI 'lifespan' protocol appears unsupported` on the console. I think the solution here will be to introduce another ASGI wrapper class similar to `AsgiTracer`. I'll model this on the example in the ASGI lifespan spec. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504790825 | https://github.com/simonw/datasette/pull/518#issuecomment-504790825 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc5MDgyNQ== | simonw 9599 | 2019-06-23T21:57:58Z | 2019-06-23T21:57:58Z | OWNER | The big one: **Replace Sanic request and response objects with my own classes, so I can remove Sanic dependency** | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504791053 | https://github.com/simonw/datasette/pull/518#issuecomment-504791053 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc5MTA1Mw== | simonw 9599 | 2019-06-23T22:00:56Z | 2019-06-23T22:00:56Z | OWNER | The `InvalidUsage` exception is thrown by Sanic when it gets an unhandled request - usually a HEAD. It was added in efbb4e83374a2c795e436c72fa79f70da72309b8 I'm going to replace it with specific handling for HEAD requests plus a unit test. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504791796 | https://github.com/simonw/datasette/pull/518#issuecomment-504791796 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc5MTc5Ng== | simonw 9599 | 2019-06-23T22:10:02Z | 2019-06-24T13:42:50Z | OWNER | The Sanic stuff I import at the moment is: - [x] `from sanic.views import HTTPMethodView` - [x] `from sanic.request import Request` https://github.com/huge-success/sanic/blob/0.7.0/sanic/request.py#L44 - [x] `from sanic.exceptions import NotFound` - [x] `from sanic import response` - used for `response.text("")`, `response.redirect(path)`, `response.HTTPResponse` and `response.html()` https://github.com/huge-success/sanic/blob/0.7.0/sanic/response.py - [x] `from sanic.request import RequestParameters` https://github.com/huge-success/sanic/blob/0.7.0/sanic/request.py#L30 | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504795648 | https://github.com/simonw/datasette/pull/518#issuecomment-504795648 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc5NTY0OA== | simonw 9599 | 2019-06-23T23:07:06Z | 2019-06-23T23:07:06Z | OWNER | For the request object.... what are the fields of it I actually use? * `request.url` * `request.query_string` * `request.path` * `request.method` * `request.args` * `request.raw_args` ALL of those are things that can be derived from the `scope` - so I think my new `Request` class (in `utils/asgi.py`) is just going to be a wrapper around a `scope`. | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504798977 | https://github.com/simonw/datasette/pull/518#issuecomment-504798977 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc5ODk3Nw== | simonw 9599 | 2019-06-23T23:52:38Z | 2019-06-23T23:52:38Z | OWNER | Last thing is to replace `sanic.response`: * `response.text("")` * `response.html()` * `response.redirect(path)` * `response.HTTPResponse` Implementations here: https://github.com/huge-success/sanic/blob/0.7.0/sanic/response.py#L175-L285 | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504843916 | https://github.com/simonw/datasette/pull/518#issuecomment-504843916 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDg0MzkxNg== | simonw 9599 | 2019-06-24T03:30:37Z | 2019-06-24T03:30:37Z | OWNER | It's live! https://a559123.datasette.io/ | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | Port Datasette from Sanic to ASGI + Uvicorn 459587155 |
Advanced export
JSON shape: default, array, newline-delimited, object
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]);