home / github

Menu
  • Search all tables
  • GraphQL API

issue_comments

Table actions
  • GraphQL API for issue_comments

10 rows where issue = 613006393 sorted by updated_at descending

✖
✖

✎ View and edit SQL

This data as json, CSV (advanced)

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

user 2

  • simonw 9
  • dmd 1

author_association 2

  • MEMBER 9
  • NONE 1

issue 1

  • Ability to serve thumbnailed Apple Photo from its place on disk · 10 ✖
id html_url issue_url node_id user created_at updated_at ▲ author_association body reactions issue performed_via_github_app
633704127 https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-633704127 https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20 MDEyOklzc3VlQ29tbWVudDYzMzcwNDEyNw== simonw 9599 2020-05-25T20:14:22Z 2020-05-25T20:14:22Z MEMBER

https://github.com/dogsheep/dogsheep-photos/blob/0.4.1/README.md#serving-photos-locally-with-datasette-media

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ability to serve thumbnailed Apple Photo from its place on disk 613006393  
633644225 https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-633644225 https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20 MDEyOklzc3VlQ29tbWVudDYzMzY0NDIyNQ== simonw 9599 2020-05-25T16:30:44Z 2020-05-25T16:30:44Z MEMBER

I'll add docs on using datasette-json-html too.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ability to serve thumbnailed Apple Photo from its place on disk 613006393  
633643921 https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-633643921 https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20 MDEyOklzc3VlQ29tbWVudDYzMzY0MzkyMQ== simonw 9599 2020-05-25T16:29:44Z 2020-05-25T16:29:44Z MEMBER

https://github.com/dogsheep/dogsheep-photos/blob/dc43fa8653cb9c7238a36f52239b91d1ec916d5c/README.md#serving-photos-locally-with-datasette-media

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ability to serve thumbnailed Apple Photo from its place on disk 613006393  
633629944 https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-633629944 https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20 MDEyOklzc3VlQ29tbWVudDYzMzYyOTk0NA== simonw 9599 2020-05-25T15:47:42Z 2020-05-25T15:47:42Z MEMBER

I'll add a proper section to the README, but for the moment here's how I do this.

First, install datasette and the datasette-media plugin.

Create a metadata.yaml file with the following content:

yaml plugins: datasette-media: photo: sql: |- select path as filepath, 200 as resize_height from apple_photos where uuid = :key photo-big: sql: |- select path as filepath, 1024 as resize_height from apple_photos where uuid = :key Now run datasette -m metadata.yaml photos.db - thumbnails will be served at http://127.0.0.1:8001/-/media/photo/F4469918-13F3-43D8-9EC1-734C0E6B60AD and larger sizes of the image at http://127.0.0.1:8001/-/media/photo-big/A8B02C7D-365E-448B-9510-69F80C26304D

I also made myself two custom pages, one showing recent images and one showing random images.

To do this, install the datasette-template-sql plugin and then create a templates/pages directory and add these files:

recent-photos.html ```html

Recent photos

{% for photo in sql("select * from apple_photos order by date desc limit 100") %} {% endfor %}

```

random-photos.html ```html

Random photos

{% for photo in sql("with foo as (select * from apple_photos order by date desc limit 5000) select * from foo order by random() limit 100") %} {% endfor %}

```

Now run datasette -m metadata.yaml photos.db --template-dir=templates/

Visit http://127.0.0.1:8001/random-photos to see some random photos or http://127.0.0.1:8002/recent-photos for recent photos.

This is using this mechanism: https://datasette.readthedocs.io/en/stable/custom_templates.html#custom-pages

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ability to serve thumbnailed Apple Photo from its place on disk 613006393  
633626741 https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-633626741 https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20 MDEyOklzc3VlQ29tbWVudDYzMzYyNjc0MQ== simonw 9599 2020-05-25T15:38:55Z 2020-05-25T15:38:55Z MEMBER

Sure, I should absolutely document this!

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ability to serve thumbnailed Apple Photo from its place on disk 613006393  
633234781 https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-633234781 https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20 MDEyOklzc3VlQ29tbWVudDYzMzIzNDc4MQ== dmd 41439 2020-05-24T13:56:13Z 2020-05-24T13:56:13Z NONE

As that seems to be closed, can you give a hint on how to make this work?

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ability to serve thumbnailed Apple Photo from its place on disk 613006393  
625947133 https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-625947133 https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20 MDEyOklzc3VlQ29tbWVudDYyNTk0NzEzMw== simonw 9599 2020-05-08T18:13:06Z 2020-05-08T18:13:06Z MEMBER

datasette-media will be able to handle this once I implement https://github.com/simonw/datasette-media/issues/3

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ability to serve thumbnailed Apple Photo from its place on disk 613006393  
624408738 https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-624408738 https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20 MDEyOklzc3VlQ29tbWVudDYyNDQwODczOA== simonw 9599 2020-05-06T02:21:05Z 2020-05-06T02:21:32Z MEMBER

Here's rendering code from my hacked-together not-yet-released S3 image proxy: ```python from starlette.responses import Response from PIL import Image, ExifTags import pyheif

for ORIENTATION_TAG in ExifTags.TAGS.keys(): if ExifTags.TAGS[ORIENTATION_TAG] == "Orientation": break ... # Load it into Pillow if ext == "heic": heic = pyheif.read_heif(image_response.content) image = Image.frombytes(mode=heic.mode, size=heic.size, data=heic.data) else: image = Image.open(io.BytesIO(image_response.content))

# Does EXIF tell us to rotate it?
try:
    exif = dict(image._getexif().items())
    if exif[ORIENTATION_TAG] == 3:
        image = image.rotate(180, expand=True)
    elif exif[ORIENTATION_TAG] == 6:
        image = image.rotate(270, expand=True)
    elif exif[ORIENTATION_TAG] == 8:
        image = image.rotate(90, expand=True)
except (AttributeError, KeyError, IndexError):
    pass

# Resize based on ?w= and ?h=, if set
width, height = image.size
w = request.query_params.get("w")
h = request.query_params.get("h")
if w is not None or h is not None:
    if h is None:
        # Set h based on w
        w = int(w)
        h = int((float(height) / width) * w)
    elif w is None:
        h = int(h)
        # Set w based on h
        w = int((float(width) / height) * h)
    w = int(w)
    h = int(h)
    image.thumbnail((w, h))

# ?bw= converts to black and white
if request.query_params.get("bw"):
    image = image.convert("L")

# ?q= sets the quality - defaults to 75
quality = 75
q = request.query_params.get("q")
if q and q.isdigit() and 1 <= int(q) <= 100:
    quality = int(q)

# Output as JPEG or PNG
output_image = io.BytesIO()
image_type = "JPEG"
kwargs = {"quality": quality}
if image.format == "PNG":
    image_type = "PNG"
    kwargs = {}

image.save(output_image, image_type, **kwargs)
return Response(
    output_image.getvalue(),
    media_type="image/jpeg",
    headers={"cache-control": "s-maxage={}, public".format(365 * 24 * 60 * 60)},
)

```

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ability to serve thumbnailed Apple Photo from its place on disk 613006393  
624408370 https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-624408370 https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20 MDEyOklzc3VlQ29tbWVudDYyNDQwODM3MA== simonw 9599 2020-05-06T02:19:27Z 2020-05-06T02:19:27Z MEMBER

The plugin can be generalized: it can be configured to know how to take the URL path, look it up in ANY table (via a custom SQL query) to get a path on disk and then serve that.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ability to serve thumbnailed Apple Photo from its place on disk 613006393  
624408220 https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-624408220 https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20 MDEyOklzc3VlQ29tbWVudDYyNDQwODIyMA== simonw 9599 2020-05-06T02:18:47Z 2020-05-06T02:18:47Z MEMBER

The apple_photos table has an indexed uuid column and a path column which stores the full path to that photo file on disk.

I can write a custom Datasette plugin which takes the uuid from the URL, looks up the path, then serves up a thumbnail of the jpeg or heic image file.

I'll prototype this is a one-off plugin first, then package it on PyPI for other people to install.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Ability to serve thumbnailed Apple Photo from its place on disk 613006393  

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 20.206ms · About: github-to-sqlite
  • Sort ascending
  • Sort descending
  • Facet by this
  • Hide this column
  • Show all columns
  • Show not-blank rows