issue_comments
59 rows where "updated_at" is on date 2021-11-19 and user = 9599 sorted by updated_at descending
This data as json, CSV (advanced)
Suggested facets: issue_url
user 1
- simonw · 59 ✖
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
974542348 | https://github.com/simonw/datasette/issues/1522#issuecomment-974542348 | https://api.github.com/repos/simonw/datasette/issues/1522 | IC_kwDOBm6k_c46FlYM | simonw 9599 | 2021-11-19T23:41:47Z | 2021-11-19T23:44:07Z | OWNER | Do I have to use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Deploy a live instance of demos/apache-proxy 1058896236 | |
974541971 | https://github.com/simonw/datasette/issues/1522#issuecomment-974541971 | https://api.github.com/repos/simonw/datasette/issues/1522 | IC_kwDOBm6k_c46FlST | simonw 9599 | 2021-11-19T23:40:32Z | 2021-11-19T23:40:32Z | OWNER | I want to be able to use build arguments to specify which commit version or branch of Datasette to deploy. This is proving hard to work out. I have this in my Dockerfile now: ``` ARG DATASETTE_REF RUN pip install https://github.com/simonw/datasette/archive/${DATASETTE_REF}.zip ``` Which works locally:
But I can't figure out the right incantation to pass to |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Deploy a live instance of demos/apache-proxy 1058896236 | |
974523569 | https://github.com/simonw/datasette/issues/1522#issuecomment-974523569 | https://api.github.com/repos/simonw/datasette/issues/1522 | IC_kwDOBm6k_c46Fgyx | simonw 9599 | 2021-11-19T22:51:10Z | 2021-11-19T22:51:10Z | OWNER | I wan a GitHub Action which I can manually activate to deploy a new version of that demo... and I want it to bake in the latest release of Datasette so I can use it to demonstrate bug fixes. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Deploy a live instance of demos/apache-proxy 1058896236 | |
974523297 | https://github.com/simonw/datasette/issues/1522#issuecomment-974523297 | https://api.github.com/repos/simonw/datasette/issues/1522 | IC_kwDOBm6k_c46Fguh | simonw 9599 | 2021-11-19T22:50:31Z | 2021-11-19T22:50:31Z | OWNER | Demo code is now at: https://github.com/simonw/datasette/tree/main/demos/apache-proxy |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Deploy a live instance of demos/apache-proxy 1058896236 | |
974521687 | https://github.com/simonw/datasette/issues/1522#issuecomment-974521687 | https://api.github.com/repos/simonw/datasette/issues/1522 | IC_kwDOBm6k_c46FgVX | simonw 9599 | 2021-11-19T22:46:26Z | 2021-11-19T22:46:26Z | OWNER | Oh weird, it started working: https://datasette-apache-proxy-demo-j7hipcg4aq-uc.a.run.app/prefix/fixtures/sortable |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Deploy a live instance of demos/apache-proxy 1058896236 | |
974506401 | https://github.com/simonw/datasette/issues/1522#issuecomment-974506401 | https://api.github.com/repos/simonw/datasette/issues/1522 | IC_kwDOBm6k_c46Fcmh | simonw 9599 | 2021-11-19T22:11:51Z | 2021-11-19T22:11:51Z | OWNER | This is frustrating: I have the following Dockerfile: ```dockerfile FROM python:3-alpine RUN apk add --no-cache \ apache2 \ apache2-proxy \ bash RUN pip install datasette ENV TINI_VERSION v0.18.0 ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static /tini RUN chmod +x /tini Append this to the end of the default httpd.conf fileRUN echo $'ServerName localhost\n\ \n\ <Proxy *>\n\ Order deny,allow\n\ Allow from all\n\ </Proxy>\n\ \n\ ProxyPass /prefix/ http://localhost:8001/\n\ Header add X-Proxied-By "Apache2"' >> /etc/apache2/httpd.conf RUN echo $'Datasette' > /var/www/localhost/htdocs/index.html WORKDIR /app ADD https://latest.datasette.io/fixtures.db /app/fixtures.db RUN echo $'#!/usr/bin/env bash\n\ set -e\n\ \n\ httpd -D FOREGROUND &\n\ datasette fixtures.db --setting base_url "/prefix/" -h 0.0.0.0 -p 8001 &\n\ \n\ wait -n' > /app/start.sh RUN chmod +x /app/start.sh EXPOSE 80
ENTRYPOINT ["/tini", "--", "/app/start.sh"]
!/bin/bashhttps://til.simonwillison.net/cloudrun/ship-dockerfile-to-cloud-runNAME="datasette-apache-proxy-demo" PROJECT=$(gcloud config get-value project) IMAGE="gcr.io/$PROJECT/$NAME" gcloud builds submit --tag $IMAGE
gcloud run deploy \
--allow-unauthenticated \
--platform=managed \
--image $IMAGE $NAME \
--port 80
Cloud Run logs: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Deploy a live instance of demos/apache-proxy 1058896236 | |
974478126 | https://github.com/simonw/datasette/issues/1519#issuecomment-974478126 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FVsu | simonw 9599 | 2021-11-19T21:16:36Z | 2021-11-19T21:16:36Z | OWNER | In the meantime I can catch these errors by changing the test to run each path twice, once with and once without the prefix. This should accurately simulate how Apache is working here. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974477465 | https://github.com/simonw/datasette/issues/1519#issuecomment-974477465 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FViZ | simonw 9599 | 2021-11-19T21:15:30Z | 2021-11-19T21:15:30Z | OWNER | I think what's happening here is Apache is actually making a request to This is pretty confusing! I think Datasette should ONLY reply to But shipping that change could break existing deployments. Maybe that should be a breaking change for 1.0. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974450232 | https://github.com/simonw/datasette/issues/1519#issuecomment-974450232 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FO44 | simonw 9599 | 2021-11-19T20:41:53Z | 2021-11-19T20:42:19Z | OWNER | https://docs.datasette.io/en/stable/deploying.html#apache-proxy-configuration says I should use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974447950 | https://github.com/simonw/datasette/issues/1519#issuecomment-974447950 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FOVO | simonw 9599 | 2021-11-19T20:40:19Z | 2021-11-19T20:40:19Z | OWNER | Figured it out! The test is not an accurate recreation of what is happening, because it doesn't simulate a request with a path of |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974435661 | https://github.com/simonw/datasette/issues/1522#issuecomment-974435661 | https://api.github.com/repos/simonw/datasette/issues/1522 | IC_kwDOBm6k_c46FLVN | simonw 9599 | 2021-11-19T20:33:42Z | 2021-11-19T20:33:42Z | OWNER | Should just be a case of deploying this ```Dockerfile FROM python:3-alpine RUN apk add --no-cache \ apache2 \ apache2-proxy \ bash RUN pip install datasette ENV TINI_VERSION v0.18.0 ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static /tini RUN chmod +x /tini Append this to the end of the default httpd.conf fileRUN echo $'ServerName localhost\n\ \n\ <Proxy *>\n\ Order deny,allow\n\ Allow from all\n\ </Proxy>\n\ \n\ ProxyPass /foo/bar/ http://localhost:9000/\n\ Header add X-Proxied-By "Apache2"' >> /etc/apache2/httpd.conf RUN echo $'Datasette' > /var/www/localhost/htdocs/index.html WORKDIR /app ADD https://latest.datasette.io/fixtures.db /app/fixtures.db RUN echo $'#!/usr/bin/env bash\n\ set -e\n\ \n\ httpd -D FOREGROUND &\n\ datasette fixtures.db --setting base_url "/foo/bar/" -p 9000 &\n\ \n\ wait -n' > /app/start.sh RUN chmod +x /app/start.sh EXPOSE 80 ENTRYPOINT ["/tini", "--", "/app/start.sh"] ``` I can follow this TIL: https://til.simonwillison.net/cloudrun/ship-dockerfile-to-cloud-run |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Deploy a live instance of demos/apache-proxy 1058896236 | |
974433520 | https://github.com/simonw/datasette/issues/1521#issuecomment-974433520 | https://api.github.com/repos/simonw/datasette/issues/1521 | IC_kwDOBm6k_c46FKzw | simonw 9599 | 2021-11-19T20:32:29Z | 2021-11-19T20:32:29Z | OWNER | This configuration works great. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docker configuration for exercising Datasette behind Apache mod_proxy 1058815557 | |
974433320 | https://github.com/simonw/datasette/issues/1519#issuecomment-974433320 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FKwo | simonw 9599 | 2021-11-19T20:32:04Z | 2021-11-19T20:32:04Z | OWNER | Still not clear why the tests pass but the live example fails. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974433206 | https://github.com/simonw/datasette/issues/1519#issuecomment-974433206 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FKu2 | simonw 9599 | 2021-11-19T20:31:52Z | 2021-11-19T20:31:52Z | OWNER | Modified my
And now the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974422829 | https://github.com/simonw/datasette/issues/1519#issuecomment-974422829 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FIMt | simonw 9599 | 2021-11-19T20:26:35Z | 2021-11-19T20:26:35Z | OWNER | In the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974420619 | https://github.com/simonw/datasette/issues/1519#issuecomment-974420619 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FHqL | simonw 9599 | 2021-11-19T20:25:19Z | 2021-11-19T20:25:19Z | OWNER | The implementations of https://github.com/simonw/datasette/blob/85849935292e500ab7a99f8fe0f9546e903baad3/datasette/utils/init.py#L228-L254 https://github.com/simonw/datasette/blob/85849935292e500ab7a99f8fe0f9546e903baad3/datasette/utils/init.py#L710-L729 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974418496 | https://github.com/simonw/datasette/issues/1519#issuecomment-974418496 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FHJA | simonw 9599 | 2021-11-19T20:24:16Z | 2021-11-19T20:24:16Z | OWNER | Here's the code that generates And here's the code for And for |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974398399 | https://github.com/simonw/datasette/issues/1519#issuecomment-974398399 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FCO_ | simonw 9599 | 2021-11-19T20:08:20Z | 2021-11-19T20:22:02Z | OWNER | The relevant test is this one: https://github.com/simonw/datasette/blob/30255055150d7bc0affc8156adc18295495020ff/tests/test_html.py#L1608-L1649 I modified that test to add
This data as json, testall, testnone, testresponse, CSV
Something very weird is going on here. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974405016 | https://github.com/simonw/datasette/issues/1519#issuecomment-974405016 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FD2Y | simonw 9599 | 2021-11-19T20:14:19Z | 2021-11-19T20:15:05Z | OWNER | I added
And it's really strange that the bug doesn't show up in the tests. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974391204 | https://github.com/simonw/datasette/issues/1519#issuecomment-974391204 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FAek | simonw 9599 | 2021-11-19T20:02:41Z | 2021-11-19T20:02:41Z | OWNER | Bug confirmed: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974389472 | https://github.com/simonw/datasette/issues/1519#issuecomment-974389472 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46FADg | simonw 9599 | 2021-11-19T20:01:02Z | 2021-11-19T20:01:02Z | OWNER | I now have a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974388295 | https://github.com/simonw/datasette/issues/1521#issuecomment-974388295 | https://api.github.com/repos/simonw/datasette/issues/1521 | IC_kwDOBm6k_c46E_xH | simonw 9599 | 2021-11-19T20:00:06Z | 2021-11-19T20:00:06Z | OWNER | And this is the version that proxies to a ```Dockerfile FROM python:3-alpine RUN apk add --no-cache \ apache2 \ apache2-proxy \ bash RUN pip install datasette ENV TINI_VERSION v0.18.0 ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static /tini RUN chmod +x /tini Append this to the end of the default httpd.conf fileRUN echo $'ServerName localhost\n\ \n\ <Proxy *>\n\ Order deny,allow\n\ Allow from all\n\ </Proxy>\n\ \n\ ProxyPass /foo/bar/ http://localhost:9000/\n\ Header add X-Proxied-By "Apache2"' >> /etc/apache2/httpd.conf RUN echo $'Datasette' > /var/www/localhost/htdocs/index.html WORKDIR /app ADD https://latest.datasette.io/fixtures.db /app/fixtures.db RUN echo $'#!/usr/bin/env bash\n\ set -e\n\ \n\ httpd -D FOREGROUND &\n\ datasette fixtures.db --setting base_url "/foo/bar/" -p 9000 &\n\ \n\ wait -n' > /app/start.sh RUN chmod +x /app/start.sh EXPOSE 80 ENTRYPOINT ["/tini", "--", "/app/start.sh"] ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docker configuration for exercising Datasette behind Apache mod_proxy 1058815557 | |
974380798 | https://github.com/simonw/datasette/issues/1521#issuecomment-974380798 | https://api.github.com/repos/simonw/datasette/issues/1521 | IC_kwDOBm6k_c46E97- | simonw 9599 | 2021-11-19T19:54:26Z | 2021-11-19T19:54:26Z | OWNER | Got it working! Here's a ```Dockerfile FROM python:3-alpine RUN apk add --no-cache \ apache2 \ apache2-proxy \ bash RUN pip install datasette ENV TINI_VERSION v0.18.0 ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static /tini RUN chmod +x /tini Append this to the end of the default httpd.conf fileRUN echo $'ServerName localhost\n\ \n\ <Proxy *>\n\ Order deny,allow\n\ Allow from all\n\ </Proxy>\n\ \n\ ProxyPass / http://localhost:9000/\n\ ProxyPassReverse / http://localhost:9000/\n\ Header add X-Proxied-By "Apache2"' >> /etc/apache2/httpd.conf WORKDIR /app RUN echo $'#!/usr/bin/env bash\n\ set -e\n\ \n\ httpd -D FOREGROUND &\n\ datasette -p 9000 &\n\ \n\ wait -n' > /app/start.sh RUN chmod +x /app/start.sh EXPOSE 80 ENTRYPOINT ["/tini", "--", "/app/start.sh"] ``` Run it like this:
{"python": {"version": "3.10.0", "full": "3.10.0 (default, Nov 13 2021, 03:23:03) [GCC 10.3.1 20210424]"}, "datasette": {"version": "0.59.2"}, "asgi": "3.0", "uvicorn": "0.15.0", "sqlite": {"version": "3.35.5", "fts_versions": ["FTS5", "FTS4", "FTS3"], "extensions": {"json1": null}, "compile_options": ["COMPILER=gcc-10.3.1 20210424", "ENABLE_COLUMN_METADATA", "ENABLE_DBSTAT_VTAB", "ENABLE_FTS3", "ENABLE_FTS3_PARENTHESIS", "ENABLE_FTS4", "ENABLE_FTS5", "ENABLE_GEOPOLY", "ENABLE_JSON1", "ENABLE_MATH_FUNCTIONS", "ENABLE_RTREE", "ENABLE_UNLOCK_NOTIFY", "MAX_VARIABLE_NUMBER=250000", "SECURE_DELETE", "THREADSAFE=1", "USE_URI"]}} ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docker configuration for exercising Datasette behind Apache mod_proxy 1058815557 | |
974371116 | https://github.com/simonw/datasette/issues/1521#issuecomment-974371116 | https://api.github.com/repos/simonw/datasette/issues/1521 | IC_kwDOBm6k_c46E7ks | simonw 9599 | 2021-11-19T19:45:47Z | 2021-11-19T19:45:47Z | OWNER | https://github.com/krallin/tini says:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docker configuration for exercising Datasette behind Apache mod_proxy 1058815557 | |
974336020 | https://github.com/simonw/datasette/issues/1521#issuecomment-974336020 | https://api.github.com/repos/simonw/datasette/issues/1521 | IC_kwDOBm6k_c46EzAU | simonw 9599 | 2021-11-19T19:10:48Z | 2021-11-19T19:10:48Z | OWNER | There's a promising looking minimal Apache 2 proxy config here: https://stackoverflow.com/questions/26474476/minimal-configuration-for-apache-reverse-proxy-in-docker-container |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docker configuration for exercising Datasette behind Apache mod_proxy 1058815557 | |
974334278 | https://github.com/simonw/datasette/issues/1521#issuecomment-974334278 | https://api.github.com/repos/simonw/datasette/issues/1521 | IC_kwDOBm6k_c46EylG | simonw 9599 | 2021-11-19T19:08:09Z | 2021-11-19T19:08:09Z | OWNER | Stripping comments using this StackOverflow recipe: https://unix.stackexchange.com/a/157619
Result is here: https://gist.github.com/simonw/0a05090df5fcff8e8b3334621fa17976 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docker configuration for exercising Datasette behind Apache mod_proxy 1058815557 | |
974332787 | https://github.com/simonw/datasette/issues/1521#issuecomment-974332787 | https://api.github.com/repos/simonw/datasette/issues/1521 | IC_kwDOBm6k_c46EyNz | simonw 9599 | 2021-11-19T19:05:52Z | 2021-11-19T19:05:52Z | OWNER | Made myself this Dockerfile to let me explore a bit: ```Dockerfile FROM python:3-alpine RUN apk add --no-cache \ apache2 CMD ["sh"]
This is the main Apache HTTP server configuration file. It contains theconfiguration directives that give the server its instructions....
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docker configuration for exercising Datasette behind Apache mod_proxy 1058815557 | |
974327812 | https://github.com/simonw/datasette/issues/1521#issuecomment-974327812 | https://api.github.com/repos/simonw/datasette/issues/1521 | IC_kwDOBm6k_c46ExAE | simonw 9599 | 2021-11-19T18:58:49Z | 2021-11-19T18:59:55Z | OWNER | From this example: https://github.com/tigelane/dockerfiles/blob/06cff2ac8cdc920ebd64f50965115eaa3d0afb84/Alpine-Apache2/Dockerfile#L25-L31 it looks like running ``` APACHE - AlpineRUN apk --update add apache2 php5-apache2 && \ #apk add openrc --no-cache && \ rm -rf /var/cache/apk/* && \ sed -i 's/#ServerName www.example.com:80/ServerName localhost/' /etc/apache2/httpd.conf && \ mkdir -p /run/apache2/ Upload our files from folder "dist".COPY dist /var/www/localhost/htdocs Manually set up the apache environment variablesENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ENV APACHE_PID_FILE /var/run/apache2.pid Execute apache2 on runEXPOSE 80 ENTRYPOINT ["httpd"] CMD ["-D", "FOREGROUND"] ``` I think I'll create my own separate copy and modify that. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docker configuration for exercising Datasette behind Apache mod_proxy 1058815557 | |
974321391 | https://github.com/simonw/datasette/issues/1521#issuecomment-974321391 | https://api.github.com/repos/simonw/datasette/issues/1521 | IC_kwDOBm6k_c46Evbv | simonw 9599 | 2021-11-19T18:49:15Z | 2021-11-19T18:57:18Z | OWNER | This pattern looks like it can help: https://ahmet.im/blog/cloud-run-multiple-processes-easy-way/ - see example in https://github.com/ahmetb/multi-process-container-lazy-solution I got that demo working locally like this:
I want to use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docker configuration for exercising Datasette behind Apache mod_proxy 1058815557 | |
974322178 | https://github.com/simonw/datasette/issues/1521#issuecomment-974322178 | https://api.github.com/repos/simonw/datasette/issues/1521 | IC_kwDOBm6k_c46EvoC | simonw 9599 | 2021-11-19T18:50:22Z | 2021-11-19T18:50:22Z | OWNER | I'll get this working on my laptop first, but then I want to get it up and running on Cloud Run - maybe with a GitHub Actions workflow in this repo that re-deploys it on manual execution. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Docker configuration for exercising Datasette behind Apache mod_proxy 1058815557 | |
974310208 | https://github.com/simonw/datasette/issues/1519#issuecomment-974310208 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46EstA | simonw 9599 | 2021-11-19T18:32:31Z | 2021-11-19T18:32:31Z | OWNER | Having a live demo running on Cloud Run that proxies through Apache and uses |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974309591 | https://github.com/simonw/datasette/issues/1519#issuecomment-974309591 | https://api.github.com/repos/simonw/datasette/issues/1519 | IC_kwDOBm6k_c46EsjX | simonw 9599 | 2021-11-19T18:31:32Z | 2021-11-19T18:31:32Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url is omitted in JSON and CSV views 1058790545 | |
974308215 | https://github.com/simonw/datasette/issues/1520#issuecomment-974308215 | https://api.github.com/repos/simonw/datasette/issues/1520 | IC_kwDOBm6k_c46EsN3 | simonw 9599 | 2021-11-19T18:29:26Z | 2021-11-19T18:29:26Z | OWNER | The solution that jumps to mind first is that it would be neat if routes could return something that meant "actually my bad, I can't handle this after all - move to the next one in the list". A related idea: it might be useful for custom views like my one here to say "no actually call the default view for this, but give me back the response so I can modify it in some way". Kind of like Django or ASGI middleware. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Pattern for avoiding accidental URL over-rides 1058803238 | |
974300823 | https://github.com/simonw/datasette/issues/1518#issuecomment-974300823 | https://api.github.com/repos/simonw/datasette/issues/1518 | IC_kwDOBm6k_c46EqaX | simonw 9599 | 2021-11-19T18:18:32Z | 2021-11-19T18:18:32Z | OWNER |
I can definitely support this using pure-JSON - I could make two versions of the row available, one that's an array of cell objects and the other that's an object mapping column names to column raw values. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Complete refactor of TableView and table.html template 1058072543 | |
974285803 | https://github.com/simonw/datasette/issues/1518#issuecomment-974285803 | https://api.github.com/repos/simonw/datasette/issues/1518 | IC_kwDOBm6k_c46Emvr | simonw 9599 | 2021-11-19T17:56:48Z | 2021-11-19T18:14:30Z | OWNER | Very confused by this piece of code here: https://github.com/simonw/datasette/blob/1c13e1af0664a4dfb1e69714c56523279cae09e4/datasette/views/table.py#L37-L63 I added it in https://github.com/simonw/datasette/commit/754836eef043676e84626c4fd3cb993eed0d2976 - in the new world that should probably be replaced by pure JSON. Aha - this comment explains it: https://github.com/simonw/datasette/issues/521#issuecomment-505279560
The goal was to support neater custom templates like this:
```html+jinja
{% for row in display_rows %}
{{ row["First_Name"] }} {{ row["Last_Name"] }}... ``` This may be an argument for continuing to allow non-JSON-objects through to the HTML templates. Need to think about that a bit more. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Complete refactor of TableView and table.html template 1058072543 | |
974287570 | https://github.com/simonw/datasette/issues/1518#issuecomment-974287570 | https://api.github.com/repos/simonw/datasette/issues/1518 | IC_kwDOBm6k_c46EnLS | simonw 9599 | 2021-11-19T17:59:33Z | 2021-11-19T17:59:33Z | OWNER | I'm going to try leaning into the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Complete refactor of TableView and table.html template 1058072543 | |
973820125 | https://github.com/simonw/sqlite-utils/issues/342#issuecomment-973820125 | https://api.github.com/repos/simonw/sqlite-utils/issues/342 | IC_kwDOCGYnMM46C1Dd | simonw 9599 | 2021-11-19T07:25:55Z | 2021-11-19T07:25:55Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Extra options to `lookup()` which get passed to `insert()` 1058196641 | |
973802998 | https://github.com/simonw/sqlite-utils/issues/342#issuecomment-973802998 | https://api.github.com/repos/simonw/sqlite-utils/issues/342 | IC_kwDOCGYnMM46Cw32 | simonw 9599 | 2021-11-19T06:59:22Z | 2021-11-19T06:59:32Z | OWNER | I don't think I need the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Extra options to `lookup()` which get passed to `insert()` 1058196641 | |
973802766 | https://github.com/simonw/sqlite-utils/issues/342#issuecomment-973802766 | https://api.github.com/repos/simonw/sqlite-utils/issues/342 | IC_kwDOCGYnMM46Cw0O | simonw 9599 | 2021-11-19T06:58:45Z | 2021-11-19T06:58:45Z | OWNER | And neither does |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Extra options to `lookup()` which get passed to `insert()` 1058196641 | |
973802469 | https://github.com/simonw/sqlite-utils/issues/342#issuecomment-973802469 | https://api.github.com/repos/simonw/sqlite-utils/issues/342 | IC_kwDOCGYnMM46Cwvl | simonw 9599 | 2021-11-19T06:58:03Z | 2021-11-19T06:58:03Z | OWNER | Also: I don't think |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Extra options to `lookup()` which get passed to `insert()` 1058196641 | |
973802308 | https://github.com/simonw/sqlite-utils/issues/342#issuecomment-973802308 | https://api.github.com/repos/simonw/sqlite-utils/issues/342 | IC_kwDOCGYnMM46CwtE | simonw 9599 | 2021-11-19T06:57:37Z | 2021-11-19T06:57:37Z | OWNER | Here's the current full method signature for I could add a test which uses introspection ( |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Extra options to `lookup()` which get passed to `insert()` 1058196641 | |
973801650 | https://github.com/simonw/sqlite-utils/issues/342#issuecomment-973801650 | https://api.github.com/repos/simonw/sqlite-utils/issues/342 | IC_kwDOCGYnMM46Cwiy | simonw 9599 | 2021-11-19T06:55:56Z | 2021-11-19T06:55:56Z | OWNER |
I do worry that I'll add more keyword arguments to |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Extra options to `lookup()` which get passed to `insert()` 1058196641 | |
973800795 | https://github.com/simonw/sqlite-utils/issues/342#issuecomment-973800795 | https://api.github.com/repos/simonw/sqlite-utils/issues/342 | IC_kwDOCGYnMM46CwVb | simonw 9599 | 2021-11-19T06:54:08Z | 2021-11-19T06:54:08Z | OWNER | Looking at the code for |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Extra options to `lookup()` which get passed to `insert()` 1058196641 | |
973700549 | https://github.com/simonw/datasette/issues/1518#issuecomment-973700549 | https://api.github.com/repos/simonw/datasette/issues/1518 | IC_kwDOBm6k_c46CX3F | simonw 9599 | 2021-11-19T03:31:20Z | 2021-11-19T03:31:26Z | OWNER | ... and while I'm doing all of this I can rewrite the templates to not use those cheating magical functions AND document the template context at the same time, refs: - #1510. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Complete refactor of TableView and table.html template 1058072543 | |
973700322 | https://github.com/simonw/datasette/issues/1518#issuecomment-973700322 | https://api.github.com/repos/simonw/datasette/issues/1518 | IC_kwDOBm6k_c46CXzi | simonw 9599 | 2021-11-19T03:30:30Z | 2021-11-19T03:30:30Z | OWNER | Right now the HTML version gets to cheat - it passes through objects that are not JSON serializable, including custom functions that can then be called by Jinja. I'm interested in maybe removing this cheating - if the HTML version could only request JSON-serializable extras those could be exposed in the API as well. It would also help cleanup the kind-of-nasty pattern I use in the current |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Complete refactor of TableView and table.html template 1058072543 | |
973698917 | https://github.com/simonw/datasette/issues/1518#issuecomment-973698917 | https://api.github.com/repos/simonw/datasette/issues/1518 | IC_kwDOBm6k_c46CXdl | simonw 9599 | 2021-11-19T03:26:18Z | 2021-11-19T03:29:03Z | OWNER | A (likely incomplete) list of features on the table page:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Complete refactor of TableView and table.html template 1058072543 | |
973699424 | https://github.com/simonw/datasette/issues/1518#issuecomment-973699424 | https://api.github.com/repos/simonw/datasette/issues/1518 | IC_kwDOBm6k_c46CXlg | simonw 9599 | 2021-11-19T03:27:49Z | 2021-11-19T03:27:49Z | OWNER | My goal is to break up a lot of this functionality into separate methods. These methods can be executed in parallel by So the HTML version itself needs to be re-written to use those JSON extras. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Complete refactor of TableView and table.html template 1058072543 | |
973696604 | https://github.com/simonw/datasette/issues/1517#issuecomment-973696604 | https://api.github.com/repos/simonw/datasette/issues/1517 | IC_kwDOBm6k_c46CW5c | simonw 9599 | 2021-11-19T03:20:00Z | 2021-11-19T03:20:00Z | OWNER | Confirmed - my test plugin is indeed correctly over-riding the table page. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Let `register_routes()` over-ride default routes within Datasette 1057996111 | |
973687978 | https://github.com/simonw/datasette/issues/1518#issuecomment-973687978 | https://api.github.com/repos/simonw/datasette/issues/1518 | IC_kwDOBm6k_c46CUyq | simonw 9599 | 2021-11-19T03:07:47Z | 2021-11-19T03:07:47Z | OWNER | I was wrong about that, you CAN over-ride default routes already. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Complete refactor of TableView and table.html template 1058072543 | |
973686874 | https://github.com/simonw/datasette/issues/1517#issuecomment-973686874 | https://api.github.com/repos/simonw/datasette/issues/1517 | IC_kwDOBm6k_c46CUha | simonw 9599 | 2021-11-19T03:06:58Z | 2021-11-19T03:06:58Z | OWNER | I made a mistake: I just wrote a test that proves that plugins CAN over-ride default routes, plus if you look at the code here the plugins get to register themselves first: https://github.com/simonw/datasette/blob/0156c6b5e52d541e93f0d68e9245f20ae83bc933/datasette/app.py#L965-L981 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Let `register_routes()` over-ride default routes within Datasette 1057996111 | |
973682389 | https://github.com/simonw/datasette/issues/1518#issuecomment-973682389 | https://api.github.com/repos/simonw/datasette/issues/1518 | IC_kwDOBm6k_c46CTbV | simonw 9599 | 2021-11-19T02:57:39Z | 2021-11-19T02:57:39Z | OWNER | Ideally I'd like to execute the existing test suite against the new implementation - that would require me to solve this so I can replace the view with the plugin version though:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Complete refactor of TableView and table.html template 1058072543 | |
973681970 | https://github.com/simonw/datasette/issues/1518#issuecomment-973681970 | https://api.github.com/repos/simonw/datasette/issues/1518 | IC_kwDOBm6k_c46CTUy | simonw 9599 | 2021-11-19T02:56:31Z | 2021-11-19T02:56:53Z | OWNER | Here's where I got to with my hacked-together initial plugin prototype - it managed to render the table page with some rows on it (and a bunch of missing functionality such as filters): https://gist.github.com/simonw/281eac9c73b062c3469607ad86470eb2 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Complete refactor of TableView and table.html template 1058072543 | |
973678931 | https://github.com/simonw/datasette/issues/878#issuecomment-973678931 | https://api.github.com/repos/simonw/datasette/issues/878 | IC_kwDOBm6k_c46CSlT | simonw 9599 | 2021-11-19T02:51:17Z | 2021-11-19T02:51:17Z | OWNER | OK, I managed to get a table to render! Here's the code I used - I had to copy a LOT of stuff. https://gist.github.com/simonw/281eac9c73b062c3469607ad86470eb2 I'm going to move this work into a new, separate issue. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
New pattern for views that return either JSON or HTML, available for plugins 648435885 | |
973635157 | https://github.com/simonw/datasette/issues/878#issuecomment-973635157 | https://api.github.com/repos/simonw/datasette/issues/878 | IC_kwDOBm6k_c46CH5V | simonw 9599 | 2021-11-19T01:07:08Z | 2021-11-19T01:07:08Z | OWNER | This exercise is proving so useful in getting my head around how the enormous and complex Here's where I've got to now - I'm systematically working through the variables that are returned for HTML and for JSON copying across code to get it to work: ```python from datasette.database import QueryInterrupted from datasette.utils import escape_sqlite from datasette.utils.asgi import Response, NotFound, Forbidden from datasette.views.base import DatasetteError from datasette import hookimpl from asyncinject import AsyncInject, inject from pprint import pformat class Table(AsyncInject): @inject async def database(self, request, datasette): # TODO: all that nasty hash resolving stuff can go here db_name = request.url_vars["db_name"] try: db = datasette.databases[db_name] except KeyError: raise NotFound(f"Database '{db_name}' does not exist") return db
@hookimpl def register_routes(): return [ (r"/t/(?P<db_name>[^/]+)/(?P<table_and_format>[^/]+?$)", Table().view), ] async def check_permissions(datasette, request, permissions): """permissions is a list of (action, resource) tuples or 'action' strings""" for permission in permissions: if isinstance(permission, str): action = permission resource = None elif isinstance(permission, (tuple, list)) and len(permission) == 2: action, resource = permission else: assert ( False ), "permission should be string or tuple of two items: {}".format( repr(permission) ) ok = await datasette.permission_allowed( request.actor, action, resource=resource, default=None, ) if ok is not None: if ok: return else: raise Forbidden(action) async def columns_to_select(datasette, database, table, request): table_columns = await database.table_columns(table) pks = await database.primary_keys(table) columns = list(table_columns) if "_col" in request.args: columns = list(pks) _cols = request.args.getlist("_col") bad_columns = [column for column in _cols if column not in table_columns] if bad_columns: raise DatasetteError( "_col={} - invalid columns".format(", ".join(bad_columns)), status=400, ) # De-duplicate maintaining order: columns.extend(dict.fromkeys(_cols)) if "_nocol" in request.args: # Return all columns EXCEPT these bad_columns = [ column for column in request.args.getlist("_nocol") if (column not in table_columns) or (column in pks) ] if bad_columns: raise DatasetteError( "_nocol={} - invalid columns".format(", ".join(bad_columns)), status=400, ) tmp_columns = [ column for column in columns if column not in request.args.getlist("_nocol") ] columns = tmp_columns return columns ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
New pattern for views that return either JSON or HTML, available for plugins 648435885 | |
973568285 | https://github.com/simonw/datasette/issues/878#issuecomment-973568285 | https://api.github.com/repos/simonw/datasette/issues/878 | IC_kwDOBm6k_c46B3kd | simonw 9599 | 2021-11-19T00:29:20Z | 2021-11-19T00:29:20Z | OWNER | This is working! ```python from datasette.utils.asgi import Response from datasette import hookimpl import html from asyncinject import AsyncInject, inject class Table(AsyncInject): @inject async def database(self, request): return request.url_vars["db_name"]
@hookimpl
def register_routes():
return [
(r"/t/(?P<db_name>[^/]+)/(?P<table_and_format>[^/]+?$)", Table().view),
]
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
New pattern for views that return either JSON or HTML, available for plugins 648435885 | |
973564260 | https://github.com/simonw/datasette/issues/878#issuecomment-973564260 | https://api.github.com/repos/simonw/datasette/issues/878 | IC_kwDOBm6k_c46B2lk | simonw 9599 | 2021-11-19T00:27:06Z | 2021-11-19T00:27:06Z | OWNER | Problem: the fancy @hookimpl def register_routes(): return [ (r"/t/(?P<db_name>[^/]+)/(?P<table_and_format>[^/]+?$)", Table().view), ] ``` This failed with error: "Table.view() takes 1 positional argument but 2 were given" So I'm going to use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
New pattern for views that return either JSON or HTML, available for plugins 648435885 | |
973554024 | https://github.com/simonw/datasette/issues/878#issuecomment-973554024 | https://api.github.com/repos/simonw/datasette/issues/878 | IC_kwDOBm6k_c46B0Fo | simonw 9599 | 2021-11-19T00:21:20Z | 2021-11-19T00:21:20Z | OWNER | That's annoying: it looks like plugins can't use async def table(request): return Response.html("Hello from {}".format( html.escape(repr(request.url_vars)) )) @hookimpl
def register_routes():
return [
(r"/(?P<db_name>[^/]+)/(?P<table_and_format>[^/]+?$)", table),
]
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
New pattern for views that return either JSON or HTML, available for plugins 648435885 | |
973542284 | https://github.com/simonw/datasette/issues/878#issuecomment-973542284 | https://api.github.com/repos/simonw/datasette/issues/878 | IC_kwDOBm6k_c46BxOM | simonw 9599 | 2021-11-19T00:16:44Z | 2021-11-19T00:16:44Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
New pattern for views that return either JSON or HTML, available for plugins 648435885 | |
973527870 | https://github.com/simonw/datasette/issues/878#issuecomment-973527870 | https://api.github.com/repos/simonw/datasette/issues/878 | IC_kwDOBm6k_c46Bts- | simonw 9599 | 2021-11-19T00:13:43Z | 2021-11-19T00:13:43Z | OWNER | New plan: I'm going to build a brand new implementation of It will reuse the existing HTML template but will be a completely new Python implementation, based on I'm going to start by just getting the table to show up on the page - then I'll add faceting, suggested facets, filters and so-on. Bonus: I'm going to see if I can get it to work for arbitrary SQL queries too (stretch goal). |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
New pattern for views that return either JSON or HTML, available for plugins 648435885 |
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]);
issue 8