github
html_url | issue_url | id | node_id | user | created_at | updated_at | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
https://github.com/dogsheep/dogsheep-photos/issues/13#issuecomment-620273692 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/13 | 620273692 | MDEyOklzc3VlQ29tbWVudDYyMDI3MzY5Mg== | 9599 | 2020-04-27T22:42:50Z | 2020-04-27T22:42:50Z | MEMBER | ``` >>> def ext_counts(directory): ... counts = {} ... for path in pathlib.Path(directory).glob("**/*"): ... ext = path.suffix ... counts[ext] = counts.get(ext, 0) + 1 ... return counts ... >>> >>> ext_counts("/Users/simon/Pictures/Photos Library.photoslibrary/originals") {'': 16, '.heic': 15478, '.jpeg': 21691, '.mov': 946, '.png': 2262, '.gif': 38, '.mp4': 116, '.aae': 2} ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607888367 | |
https://github.com/simonw/datasette/issues/726#issuecomment-620260658 | https://api.github.com/repos/simonw/datasette/issues/726 | 620260658 | MDEyOklzc3VlQ29tbWVudDYyMDI2MDY1OA== | 9599 | 2020-04-27T22:05:46Z | 2020-04-27T22:05:46Z | OWNER | Aah - yes I've seen this a few times before in my own projects. The problem is that the column types don't match up - your `oeuvre_id` column here is an integer, but if you look at the schema for `prelib_oeuvre` (at the bottom of this page: http://crbc-dataset.huma-num.fr/prelib/prelib_oeuvre) you'll see that it's defined as text: ```sql CREATE TABLE "prelib_oeuvre" ( "id" TEXT, "titre" TEXT, "descriptif" TEXT, "wikidata" TEXT, "ark_bnf" TEXT, "notes" TEXT ,PRIMARY KEY ([id]) ); ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
600120439 | |
https://github.com/simonw/datasette/issues/743#issuecomment-620177365 | https://api.github.com/repos/simonw/datasette/issues/743 | 620177365 | MDEyOklzc3VlQ29tbWVudDYyMDE3NzM2NQ== | 9599 | 2020-04-27T19:11:01Z | 2020-04-27T19:11:30Z | OWNER | Huh... turns out the documentation already claims that wildcards work! Closing this as wontfix: https://datasette.readthedocs.io/en/stable/full_text_search.html#the-table-view-api <img width="751" alt="Full-text_search_—_Datasette_documentation" src="https://user-images.githubusercontent.com/9599/80410937-34212400-8880-11ea-84ba-1099c0f26563.png"> | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607770595 | |
https://github.com/simonw/datasette/issues/743#issuecomment-620174977 | https://api.github.com/repos/simonw/datasette/issues/743 | 620174977 | MDEyOklzc3VlQ29tbWVudDYyMDE3NDk3Nw== | 9599 | 2020-04-27T19:05:56Z | 2020-04-27T19:05:56Z | OWNER | The other option would be to leave this as-is, and let people wildcard search all they want. I'm leaning in that direction. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607770595 | |
https://github.com/simonw/datasette/issues/735#issuecomment-620172085 | https://api.github.com/repos/simonw/datasette/issues/735 | 620172085 | MDEyOklzc3VlQ29tbWVudDYyMDE3MjA4NQ== | 9599 | 2020-04-27T19:00:30Z | 2020-04-27T19:00:30Z | OWNER | I think this may be a `datasette-publish-now` bug, as in https://github.com/simonw/datasette-publish-now/issues/20 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605806386 | |
https://github.com/simonw/datasette/issues/736#issuecomment-620171785 | https://api.github.com/repos/simonw/datasette/issues/736 | 620171785 | MDEyOklzc3VlQ29tbWVudDYyMDE3MTc4NQ== | 9599 | 2020-04-27T18:59:54Z | 2020-04-27T18:59:54Z | OWNER | Would you mind trying publishing your database using one of the other options - Heroku, Cloud Run or https://fly.io/ - and see if you have the same bug there? If you DO get the same bug with another option, please re-open this issue. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
606720674 | |
https://github.com/simonw/datasette/issues/736#issuecomment-620171434 | https://api.github.com/repos/simonw/datasette/issues/736 | 620171434 | MDEyOklzc3VlQ29tbWVudDYyMDE3MTQzNA== | 9599 | 2020-04-27T18:59:16Z | 2020-04-27T18:59:16Z | OWNER | I'm suspicious that this might be a bug with `datasette-publish-now` not with core Datasette. See https://github.com/simonw/datasette-publish-now/issues/20 - I think that might be the same issue. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
606720674 | |
https://github.com/simonw/datasette/issues/743#issuecomment-620170826 | https://api.github.com/repos/simonw/datasette/issues/743 | 620170826 | MDEyOklzc3VlQ29tbWVudDYyMDE3MDgyNg== | 9599 | 2020-04-27T18:58:04Z | 2020-04-27T18:58:04Z | OWNER | Maybe this is moot because you can't store a `*` character in a FTS table anyway, so it would never make sense to search for one? In which case maybe `escape_fts()` should just strip out `*` entirely? Best source of information I could find was this tiny thread from 2014 about FTS4: http://sqlite.1065341.n5.nabble.com/Escaping-conventions-for-FTS4-virtual-table-queries-td74589.html > Dave Baggett wrote: > > What if I want docids of documents containing the exact literal token "any*"? > > You would have to use one of the Unicode tokenizers, and configure it to > interpret * as a token character. > > > how do I escape the asterisk so that it's not interpreted as a wildcard? > > There are no escapes. When * is a token character, you lose the ability > to do prefix searches. I could investigate further by learning to use the fts5vocab virtual table debugging tool to see what's actually stored in those FTS5 indexes and check if `*` is indeed stripped by them. https://www.sqlite.org/fts5.html#the_fts5vocab_virtual_table_module | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607770595 | |
https://github.com/simonw/datasette/issues/743#issuecomment-620166959 | https://api.github.com/repos/simonw/datasette/issues/743 | 620166959 | MDEyOklzc3VlQ29tbWVudDYyMDE2Njk1OQ== | 9599 | 2020-04-27T18:50:30Z | 2020-04-27T18:50:30Z | OWNER | Here's the `escape_fts()` function: https://github.com/simonw/datasette/blob/89c4ddd4828623888e91a1d2cb396cba12d4e7b4/datasette/utils/__init__.py#L742-L753 https://latest.datasette.io/fixtures?sql=select+escape_fts%28%27bar%2A%27%29 <img width="466" alt="fixtures__select_escape_fts__bar____and_Launch_Meeting_-_Zoom" src="https://user-images.githubusercontent.com/9599/80409172-3df55800-887d-11ea-9c71-2245f2f942e3.png"> So apparently wrapping a SQLite FTS word like `"bar*"` doesn't prevent SQLite from expanding the wildcard. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607770595 | |
https://github.com/simonw/datasette/issues/742#issuecomment-620153909 | https://api.github.com/repos/simonw/datasette/issues/742 | 620153909 | MDEyOklzc3VlQ29tbWVudDYyMDE1MzkwOQ== | 9599 | 2020-04-27T18:24:53Z | 2020-04-27T18:24:53Z | OWNER | I'm already using it extensively: https://github.com/simonw/datasette/blob/25014ca25eb70b4c1217558ebd14db2845973bfb/tests/fixtures.py#L165-L189 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607243940 | |
https://github.com/simonw/datasette/issues/731#issuecomment-620095649 | https://api.github.com/repos/simonw/datasette/issues/731 | 620095649 | MDEyOklzc3VlQ29tbWVudDYyMDA5NTY0OQ== | 9599 | 2020-04-27T16:32:44Z | 2020-04-27T16:32:44Z | OWNER | Documentation: https://datasette.readthedocs.io/en/latest/config.html#configuration-directory-mode | { "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 1, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605110015 | |
https://github.com/simonw/datasette/issues/741#issuecomment-619708914 | https://api.github.com/repos/simonw/datasette/issues/741 | 619708914 | MDEyOklzc3VlQ29tbWVudDYxOTcwODkxNA== | 9599 | 2020-04-27T04:30:02Z | 2020-04-27T04:30:24Z | OWNER | This can generate a `config.json` file that's included the published deployment, thanks to the work in #731 (pull request #739). | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607223136 | |
https://github.com/simonw/datasette/issues/741#issuecomment-619708745 | https://api.github.com/repos/simonw/datasette/issues/741 | 619708745 | MDEyOklzc3VlQ29tbWVudDYxOTcwODc0NQ== | 9599 | 2020-04-27T04:29:26Z | 2020-04-27T04:29:26Z | OWNER | I can show deprecation warnings for `--extra-options` and remove the option entirely in Datasette 1.0. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607223136 | |
https://github.com/simonw/datasette/pull/739#issuecomment-619700113 | https://api.github.com/repos/simonw/datasette/issues/739 | 619700113 | MDEyOklzc3VlQ29tbWVudDYxOTcwMDExMw== | 9599 | 2020-04-27T03:58:09Z | 2020-04-27T03:58:09Z | OWNER | I think documentation goes on https://datasette.readthedocs.io/en/stable/config.html - but I'm going to need to re-arrange that page to fit in a section about configuration directories. I'll move the existing list of settings into a "configration options" section. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607107849 | |
https://github.com/simonw/datasette/issues/740#issuecomment-619698467 | https://api.github.com/repos/simonw/datasette/issues/740 | 619698467 | MDEyOklzc3VlQ29tbWVudDYxOTY5ODQ2Nw== | 9599 | 2020-04-27T03:51:27Z | 2020-04-27T03:51:27Z | OWNER | Spotted this while working on #731 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607211058 | |
https://github.com/simonw/datasette/pull/739#issuecomment-619678614 | https://api.github.com/repos/simonw/datasette/issues/739 | 619678614 | MDEyOklzc3VlQ29tbWVudDYxOTY3ODYxNA== | 9599 | 2020-04-27T02:44:21Z | 2020-04-27T02:44:21Z | OWNER | I'm going to add a `Datasette(config_dir=".")` parameter which initializes from the given directory, allowing other parameters to over-ride it. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607107849 | |
https://github.com/simonw/datasette/pull/739#issuecomment-619622311 | https://api.github.com/repos/simonw/datasette/issues/739 | 619622311 | MDEyOklzc3VlQ29tbWVudDYxOTYyMjMxMQ== | 9599 | 2020-04-26T20:45:07Z | 2020-04-26T20:45:07Z | OWNER | I think ALL explicit options should over-ride options that were detected in the directory structure. This means my current implementation isn't quite right - using a class method makes it hard to merge the details with the explicit options passed to the CLI function. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607107849 | |
https://github.com/simonw/datasette/issues/731#issuecomment-619621388 | https://api.github.com/repos/simonw/datasette/issues/731 | 619621388 | MDEyOklzc3VlQ29tbWVudDYxOTYyMTM4OA== | 9599 | 2020-04-26T20:38:09Z | 2020-04-26T20:38:30Z | OWNER | Work now happening in the pull request: https://github.com/simonw/datasette/issues/739 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605110015 | |
https://github.com/simonw/datasette/issues/648#issuecomment-619612675 | https://api.github.com/repos/simonw/datasette/issues/648 | 619612675 | MDEyOklzc3VlQ29tbWVudDYxOTYxMjY3NQ== | 9599 | 2020-04-26T19:35:09Z | 2020-04-26T19:35:09Z | OWNER | https://www.niche-museums.com/about now uses this mechanism. It used to be an empty `about.db` database but you can see from https://www.niche-museums.com/-/databases that it's now using the new mechanism. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
534492501 | |
https://github.com/simonw/datasette/issues/731#issuecomment-619611417 | https://api.github.com/repos/simonw/datasette/issues/731 | 619611417 | MDEyOklzc3VlQ29tbWVudDYxOTYxMTQxNw== | 9599 | 2020-04-26T19:28:12Z | 2020-04-26T19:28:12Z | OWNER | I've shipped #648 now, so no reason not to go with the `static/` folder as the thing that gets detected and mounted as `/static`. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605110015 | |
https://github.com/simonw/datasette/issues/738#issuecomment-619605811 | https://api.github.com/repos/simonw/datasette/issues/738 | 619605811 | MDEyOklzc3VlQ29tbWVudDYxOTYwNTgxMQ== | 9599 | 2020-04-26T18:58:56Z | 2020-04-26T18:58:56Z | OWNER | https://github.com/simonw/datasette/blob/304e7b1d9fd904ae1c35600bc03662eb90eeeae0/datasette/app.py#L781-L789 `request` is an optional argument here: https://github.com/simonw/datasette/blob/304e7b1d9fd904ae1c35600bc03662eb90eeeae0/datasette/app.py#L556-L558 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607086780 | |
https://github.com/simonw/datasette/issues/648#issuecomment-619604720 | https://api.github.com/repos/simonw/datasette/issues/648 | 619604720 | MDEyOklzc3VlQ29tbWVudDYxOTYwNDcyMA== | 9599 | 2020-04-26T18:50:30Z | 2020-04-26T18:50:30Z | OWNER | Documentation: https://datasette.readthedocs.io/en/latest/custom_templates.html#custom-pages | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
534492501 | |
https://github.com/simonw/datasette/pull/737#issuecomment-619599904 | https://api.github.com/repos/simonw/datasette/issues/737 | 619599904 | MDEyOklzc3VlQ29tbWVudDYxOTU5OTkwNA== | 9599 | 2020-04-26T18:21:06Z | 2020-04-26T18:21:06Z | OWNER | Just needs documentation now. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607067303 | |
https://github.com/simonw/datasette/pull/737#issuecomment-619593899 | https://api.github.com/repos/simonw/datasette/issues/737 | 619593899 | MDEyOklzc3VlQ29tbWVudDYxOTU5Mzg5OQ== | 9599 | 2020-04-26T17:49:06Z | 2020-04-26T17:49:06Z | OWNER | I'm going with `custom_header(name, value)`, `custom_status(numeric_code)`, `custom_redirect("URL")`. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607067303 | |
https://github.com/simonw/datasette/pull/737#issuecomment-619593811 | https://api.github.com/repos/simonw/datasette/issues/737 | 619593811 | MDEyOklzc3VlQ29tbWVudDYxOTU5MzgxMQ== | 9599 | 2020-04-26T17:48:31Z | 2020-04-26T17:48:31Z | OWNER | Design challenge: the function that can be called in the custom template to return a custom status code and/or headers. Proposed design: ``` {{ custom_headers({"x-foo": "bar"}) }} {{ custom_status_code(404) }} ``` Or should I combine them into one function? ``` {{ custom_headers({"x-foo": "bar"}, status=404) }} ``` A common use-case here would be a redirect. How should that look? ``` {{ custom_redirect("/foo") }} - defaults to 301 {{ custom_redirect("/foo", status=302) }} ``` Maybe avoid dictionary syntax entirely: ``` {{ custom_header("x-foo", "bar") }} ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607067303 | |
https://github.com/simonw/datasette/pull/737#issuecomment-619591533 | https://api.github.com/repos/simonw/datasette/issues/737 | 619591533 | MDEyOklzc3VlQ29tbWVudDYxOTU5MTUzMw== | 9599 | 2020-04-26T17:33:48Z | 2020-04-26T17:33:48Z | OWNER | > > Stretch goal: it would be neat if these pages could return custom HTTP headers (eg content-type) and maybe even status codes (eg for redirects) somehow. > > I think I could do that with a custom template function - if that function is called during the render then we follow those instructions instead of returning the rendered HTML. https://github.com/simonw/datasette/issues/648#issuecomment-619591380 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
607067303 | |
https://github.com/simonw/datasette/issues/648#issuecomment-619591380 | https://api.github.com/repos/simonw/datasette/issues/648 | 619591380 | MDEyOklzc3VlQ29tbWVudDYxOTU5MTM4MA== | 9599 | 2020-04-26T17:33:04Z | 2020-04-26T17:33:04Z | OWNER | > > Stretch goal: it would be neat if these pages could return custom HTTP headers (eg content-type) and maybe even status codes (eg for redirects) somehow. > > I think I could do that with a custom template function - if that function is called during the render then we follow those instructions instead of returning the rendered HTML. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
534492501 | |
https://github.com/simonw/datasette/issues/648#issuecomment-619263600 | https://api.github.com/repos/simonw/datasette/issues/648 | 619263600 | MDEyOklzc3VlQ29tbWVudDYxOTI2MzYwMA== | 9599 | 2020-04-24T22:23:13Z | 2020-04-24T22:23:13Z | OWNER | Idea: `handle_404` can hand certain not found errors off to `handle_500` so it can render them correctly; https://github.com/simonw/datasette/blob/227bb3e91fe34811a9374150798643a5af98ed79/datasette/app.py#L748-L765 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
534492501 | |
https://github.com/simonw/datasette/issues/648#issuecomment-619259859 | https://api.github.com/repos/simonw/datasette/issues/648 | 619259859 | MDEyOklzc3VlQ29tbWVudDYxOTI1OTg1OQ== | 9599 | 2020-04-24T22:10:34Z | 2020-04-24T22:10:34Z | OWNER | The trickiest part here is the 404 logic. It's spread out through a couple of places right now. It's in `datasette.utils.asgi.AsgiRouter`: https://github.com/simonw/datasette/blob/227bb3e91fe34811a9374150798643a5af98ed79/datasette/utils/asgi.py#L98-L134 Then also in the `DatasetteRouter subclass of that: https://github.com/simonw/datasette/blob/227bb3e91fe34811a9374150798643a5af98ed79/datasette/app.py#L736-L757 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
534492501 | |
https://github.com/dogsheep/dogsheep-photos/issues/12#issuecomment-618796564 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/12 | 618796564 | MDEyOklzc3VlQ29tbWVudDYxODc5NjU2NA== | 9599 | 2020-04-24T04:35:25Z | 2020-04-24T04:35:25Z | MEMBER | Code: https://github.com/dogsheep/photos-to-sqlite/blob/a388cf1f1b6b67752d669466cda8b171b6582171/photos_to_sqlite/cli.py#L109-L114 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
606033104 | |
https://github.com/simonw/datasette/issues/648#issuecomment-618775631 | https://api.github.com/repos/simonw/datasette/issues/648 | 618775631 | MDEyOklzc3VlQ29tbWVudDYxODc3NTYzMQ== | 9599 | 2020-04-24T03:03:35Z | 2020-04-24T03:03:35Z | OWNER | > Stretch goal: it would be neat if these pages could return custom HTTP headers (eg content-type) and maybe even status codes (eg for redirects) somehow. I think I could do that with a custom template function - if that function is called during the render then we follow those instructions instead of returning the rendered HTML. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
534492501 | |
https://github.com/simonw/datasette/issues/648#issuecomment-618775028 | https://api.github.com/repos/simonw/datasette/issues/648 | 618775028 | MDEyOklzc3VlQ29tbWVudDYxODc3NTAyOA== | 9599 | 2020-04-24T03:01:32Z | 2020-04-24T03:01:32Z | OWNER | Now that I've closed #577 this should be pretty easy to implement. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
534492501 | |
https://github.com/simonw/datasette/issues/731#issuecomment-618772317 | https://api.github.com/repos/simonw/datasette/issues/731 | 618772317 | MDEyOklzc3VlQ29tbWVudDYxODc3MjMxNw== | 9599 | 2020-04-24T02:49:46Z | 2020-04-24T02:49:46Z | OWNER | Yeah I'll do that. My original thinking on allowing the `--static` option to mount other things to the root is that it would make it easy for people to add HTML "pages" to their site - like https://www.niche-museums.com/map for example. But I've proposed a better solution for that here: #648 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605110015 | |
https://github.com/dogsheep/dogsheep-photos/issues/9#issuecomment-618725155 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/9 | 618725155 | MDEyOklzc3VlQ29tbWVudDYxODcyNTE1NQ== | 9599 | 2020-04-23T23:39:14Z | 2020-04-23T23:39:14Z | MEMBER | A few minutes later... ``` Fetching existing keys from S3... Got 22,446 existing keys Calculating hashes [####################################] 100% 22,441 hashed files, 610 are not yet in S3 Uploading 0.99 GB Uploading 610 photos [------------------------------------] 1/610 03:10:35 ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605938063 | |
https://github.com/dogsheep/dogsheep-photos/issues/9#issuecomment-618724149 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/9 | 618724149 | MDEyOklzc3VlQ29tbWVudDYxODcyNDE0OQ== | 9599 | 2020-04-23T23:35:29Z | 2020-04-23T23:35:29Z | MEMBER | ``` % photos-to-sqlite upload photos.db ~/Pictures/Photos\ Library.photoslibrary/originals Fetching existing keys from S3... Got 22,446 existing keys Calculating hashes [####--------------------------------] 13% 00:04:14 ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605938063 | |
https://github.com/simonw/datasette/issues/731#issuecomment-618155472 | https://api.github.com/repos/simonw/datasette/issues/731 | 618155472 | MDEyOklzc3VlQ29tbWVudDYxODE1NTQ3Mg== | 9599 | 2020-04-23T03:28:42Z | 2020-04-23T03:28:56Z | OWNER | As an alternative to `--static` this could work by letting you create the following: - `static/css/` - `static/js/` Which would be automatically mounted at `/js/...` and `/css/...` Or maybe just mount `static/` at `/static/` instead? | { "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605110015 | |
https://github.com/dogsheep/dogsheep-photos/issues/8#issuecomment-618100658 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/8 | 618100658 | MDEyOklzc3VlQ29tbWVudDYxODEwMDY1OA== | 9599 | 2020-04-23T00:03:35Z | 2020-04-23T00:03:35Z | MEMBER | Also MD5 isn't guaranteed for the ETag: > If an object is created by either the Multipart Upload or Part Copy operation, the ETag is not an MD5 digest, regardless of the method of encryption. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605147638 | |
https://github.com/dogsheep/dogsheep-photos/issues/8#issuecomment-618100434 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/8 | 618100434 | MDEyOklzc3VlQ29tbWVudDYxODEwMDQzNA== | 9599 | 2020-04-23T00:02:53Z | 2020-04-23T00:02:53Z | MEMBER | I don't think it matters one way or the other - I'm storing the sha256 in the filename, so the fact that I could read the MD5 back from the list bucket operation doesn't give me any benefits. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605147638 | |
https://github.com/simonw/datasette/issues/731#issuecomment-618070791 | https://api.github.com/repos/simonw/datasette/issues/731 | 618070791 | MDEyOklzc3VlQ29tbWVudDYxODA3MDc5MQ== | 9599 | 2020-04-22T22:21:27Z | 2020-04-22T22:21:27Z | OWNER | I linked to this from https://github.com/zeit/now/discussions/4055 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605110015 | |
https://github.com/simonw/datasette/issues/731#issuecomment-618070541 | https://api.github.com/repos/simonw/datasette/issues/731 | 618070541 | MDEyOklzc3VlQ29tbWVudDYxODA3MDU0MQ== | 9599 | 2020-04-22T22:20:38Z | 2020-04-22T22:20:38Z | OWNER | I started thinking about this while building https://github.com/simonw/datasette-publish-now The Vercel hosting platform is built on ASGI - so I need a way to provide an `app` ASGI object for it to use rather than Datasette's normal pattern of starting up the server using the `datasette serve` command. The plugin currently does that by generating an `index.py` file that looks like this: ```python from datasette.app import Datasette import json metadata = dict() try: metadata = json.load(open("metadata.json")) except Exception: pass app = Datasette([], ["fixtures.db"], metadata=metadata).app() ``` But that means I have to replicate the different CLI options - `--plugins-dir` etc - and figure out how to pass them to the `Datasette()` constructor. This would be a whole lot easier if I could use `app = Datasette(configure_directory=".")` and provide a magically configured instance based on the presence of files in the specified directory. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
605110015 | |
https://github.com/dogsheep/github-to-sqlite/issues/31#issuecomment-617491607 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/31 | 617491607 | MDEyOklzc3VlQ29tbWVudDYxNzQ5MTYwNw== | 9599 | 2020-04-22T01:20:19Z | 2020-04-22T01:20:19Z | MEMBER | https://github-to-sqlite.dogsheep.net/github/milestones now link to repo: <img width="1095" alt="Screen Shot 2020-04-21 at 6 19 03 PM" src="https://user-images.githubusercontent.com/9599/79930145-956a7280-83fc-11ea-9b47-b0c5674a0d4f.png"> And so do issues: https://github-to-sqlite.dogsheep.net/github/issues <img width="1095" alt="Screen Shot 2020-04-21 at 6 19 53 PM" src="https://user-images.githubusercontent.com/9599/79930200-bd59d600-83fc-11ea-8fb8-b40772140409.png"> | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
603624862 | |
https://github.com/dogsheep/github-to-sqlite/issues/32#issuecomment-617490914 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/32 | 617490914 | MDEyOklzc3VlQ29tbWVudDYxNzQ5MDkxNA== | 9599 | 2020-04-22T01:17:44Z | 2020-04-22T01:17:44Z | MEMBER | https://github-to-sqlite.dogsheep.net/github?sql=select+html_url%2C+id%2C+issue+from+issue_comments+order+by+updated_at+desc+limit+101 now shows issues. And https://github-to-sqlite.dogsheep.net/github/issue_comments links to them: <img width="395" alt="Screen Shot 2020-04-21 at 6 17 33 PM" src="https://user-images.githubusercontent.com/9599/79930066-6227e380-83fc-11ea-8416-8b9d55660cb5.png"> | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
604222295 | |
https://github.com/dogsheep/github-to-sqlite/issues/32#issuecomment-617369247 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/32 | 617369247 | MDEyOklzc3VlQ29tbWVudDYxNzM2OTI0Nw== | 9599 | 2020-04-21T19:33:03Z | 2020-04-21T19:33:03Z | MEMBER | Caused by #31. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
604222295 | |
https://github.com/dogsheep/github-to-sqlite/issues/32#issuecomment-617364956 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/32 | 617364956 | MDEyOklzc3VlQ29tbWVudDYxNzM2NDk1Ng== | 9599 | 2020-04-21T19:24:45Z | 2020-04-21T19:24:45Z | MEMBER | That's because I just broke this code: https://github.com/dogsheep/github-to-sqlite/blob/2cf75a0a036719eb7e57fdc7c5c2ea0f4c26978a/github_to_sqlite/utils.py#L131-L139 It expects the `repo` column to be `simonw/datasette` but it's now an ID instead. I should add a test for this as part of the fix. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
604222295 | |
https://github.com/dogsheep/github-to-sqlite/issues/31#issuecomment-617348174 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/31 | 617348174 | MDEyOklzc3VlQ29tbWVudDYxNzM0ODE3NA== | 9599 | 2020-04-21T18:50:29Z | 2020-04-21T18:50:29Z | MEMBER | Since this represents a breaking schema change for anyone running SQL queries against these tables, I'm going to do a major version bump to 2.0 when I release this. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
603624862 | |
https://github.com/dogsheep/github-to-sqlite/issues/31#issuecomment-616884647 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/31 | 616884647 | MDEyOklzc3VlQ29tbWVudDYxNjg4NDY0Nw== | 9599 | 2020-04-21T00:49:16Z | 2020-04-21T00:50:20Z | MEMBER | The API just gives us the `repository_url`: https://api.github.com/repos/simonw/datasette/issues ![Mozilla_Firefox_and_Topic__Week_2__Discussion__Submit_your_six_story_points_here](https://user-images.githubusercontent.com/9599/79812950-283cdb80-832f-11ea-8759-9633087d1e7e.png) We currently turn that into a `simonw/datasette` string here: https://github.com/dogsheep/github-to-sqlite/blob/e0e8d8caa9657b04bfb8a2cf16c9b580f38b1805/github_to_sqlite/utils.py#L43-L46 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
603624862 | |
https://github.com/dogsheep/github-to-sqlite/issues/30#issuecomment-616883726 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/30 | 616883726 | MDEyOklzc3VlQ29tbWVudDYxNjg4MzcyNg== | 9599 | 2020-04-21T00:45:23Z | 2020-04-21T00:45:23Z | MEMBER | Demo of fix: https://github-to-sqlite.dogsheep.net/github/issues?assignee__notblank=1&milestone__notblank=1 ![github__issues__4_rows_where_where_assignee_is_not_blank_and_milestone_is_not_blank_sorted_by_updated_at_descending](https://user-images.githubusercontent.com/9599/79812758-b49ace80-832e-11ea-81db-bdf993b872cc.png) | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
603618244 | |
https://github.com/dogsheep/github-to-sqlite/issues/29#issuecomment-616883275 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/29 | 616883275 | MDEyOklzc3VlQ29tbWVudDYxNjg4MzI3NQ== | 9599 | 2020-04-21T00:43:28Z | 2020-04-21T00:43:28Z | MEMBER | I'm copying repo from issue, which surprisingly is a string, not an integer ID. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
603617013 | |
https://github.com/dogsheep/github-to-sqlite/issues/30#issuecomment-616879753 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/30 | 616879753 | MDEyOklzc3VlQ29tbWVudDYxNjg3OTc1Mw== | 9599 | 2020-04-21T00:29:29Z | 2020-04-21T00:29:29Z | MEMBER | `assignee` looks like it's the incorrect type too. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
603618244 | |
https://github.com/dogsheep/twitter-to-sqlite/issues/45#issuecomment-616029262 | https://api.github.com/repos/dogsheep/twitter-to-sqlite/issues/45 | 616029262 | MDEyOklzc3VlQ29tbWVudDYxNjAyOTI2Mg== | 9599 | 2020-04-19T04:39:21Z | 2020-04-19T04:39:21Z | MEMBER | ![44714E00-8CC5-46CD-9E48-1F4DD148FCC8](https://user-images.githubusercontent.com/9599/79679696-09b6d300-81bd-11ea-80e4-0653d92e4f58.jpeg) | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602619330 | |
https://github.com/dogsheep/dogsheep-photos/issues/7#issuecomment-615993178 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/7 | 615993178 | MDEyOklzc3VlQ29tbWVudDYxNTk5MzE3OA== | 9599 | 2020-04-19T00:37:08Z | 2020-04-19T00:37:08Z | MEMBER | https://pypi.org/project/ImageHash/ Is one option. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602585497 | |
https://github.com/dogsheep/dogsheep-photos/issues/6#issuecomment-615983393 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/6 | 615983393 | MDEyOklzc3VlQ29tbWVudDYxNTk4MzM5Mw== | 9599 | 2020-04-18T23:53:10Z | 2020-04-18T23:53:10Z | MEMBER | ``` $ photos-to-sqlite upload photos3.db ~/Pictures/Photos\ Library.photoslibrary/Masters/2020 Uploading 2.09 GB [##----------------------------------] 6% 00:36:37 ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602575575 | |
https://github.com/dogsheep/dogsheep-photos/issues/6#issuecomment-615979923 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/6 | 615979923 | MDEyOklzc3VlQ29tbWVudDYxNTk3OTkyMw== | 9599 | 2020-04-18T23:36:02Z | 2020-04-18T23:36:02Z | MEMBER | I'll use a Click progress bar. To do this I need to first calculate the sum number of bytes in the photos that are going to be uploaded, then run the upload. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602575575 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615957385 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615957385 | MDEyOklzc3VlQ29tbWVudDYxNTk1NzM4NQ== | 9599 | 2020-04-18T21:56:16Z | 2020-04-18T21:58:11Z | MEMBER | Got this working! I'll do EXIF in a separate ticket #3. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/5#issuecomment-615949574 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/5 | 615949574 | MDEyOklzc3VlQ29tbWVudDYxNTk0OTU3NA== | 9599 | 2020-04-18T21:06:07Z | 2020-04-18T21:06:07Z | MEMBER | ``` $ photos-to-sqlite s3-auth Create S3 credentials and paste them here: Access key ID: xxx Secret access key: yyy $ cat auth.json { "access_key_id": "xxx", "secret_access_key": "yyy" } ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602551638 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615948102 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615948102 | MDEyOklzc3VlQ29tbWVudDYxNTk0ODEwMg== | 9599 | 2020-04-18T20:56:59Z | 2020-04-18T20:56:59Z | MEMBER | I'm going to start with this: `photos-to-sqlite upload photos.db ~/path/to/directory` This will scan the provided directory (and all sub-directories) for image files. It will then: * Calculate a sha256 of the contents of that file * Upload the file to a key that's `sha256.jpg` or `.heic` * Upload a `sha256.json` file with the original path to the image * Add that image to a `uploads` table in `photos.db` Stretch goal: grab the EXIF data and include that in the `.json` upload AND the `uploads` database table. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615947370 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615947370 | MDEyOklzc3VlQ29tbWVudDYxNTk0NzM3MA== | 9599 | 2020-04-18T20:52:13Z | 2020-04-18T20:52:13Z | MEMBER | This is great! I now have a key that can upload photos, and a separate key that can download photos OR generate signed URLs to access those photos. Next step: a script that starts uploading my photos. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615947229 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615947229 | MDEyOklzc3VlQ29tbWVudDYxNTk0NzIyOQ== | 9599 | 2020-04-18T20:51:26Z | 2020-04-18T20:51:26Z | MEMBER | Running the upload again like this resulted in the correct content-type: ```python client.upload_file( "/Users/simonw/Desktop/this_is_fine.jpg", "dogsheep-photos-simon", "this_is_fine.jpg", ExtraArgs={ "ContentType": "image/jpeg" } ) ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615946537 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615946537 | MDEyOklzc3VlQ29tbWVudDYxNTk0NjUzNw== | 9599 | 2020-04-18T20:48:13Z | 2020-04-18T20:48:13Z | MEMBER | How about generating a signed URL? ```python read_client.generate_presigned_url( "get_object", Params={ "Bucket": "dogsheep-photos-simon", "Key": "this_is_fine.jpg", }, ExpiresIn=600 ) ``` Gave me https://dogsheep-photos-simon.s3.amazonaws.com/this_is_fine.jpg?AWSAccessKeyId=AKIAWXFXAIOZNZ3JFO7I&Signature=x1zrS4w4OTGAACd7yHp9mYqXvN8%3D&Expires=1587243398 Which does this: ``` ~ $ curl -i 'https://dogsheep-photos-simon.s3.amazonaws.com/this_is_fine.jpg?AWSAccessKeyId=AKIAWXFXAIOZNZ3JFO7I&Signature=x1zrS4w4OTGAACd7yHp9mYqXvN8%3D&Expires=1587243398' HTTP/1.1 307 Temporary Redirect x-amz-bucket-region: us-west-1 x-amz-request-id: E78CD859AEE21D33 x-amz-id-2: 648mx+1+YSGga7NDOU7Q6isfsKnEPWOLC+DI4+x2o9FCc6pSCdIaoHJUbFMI8Vsuh1ADtx46ymU= Location: https://dogsheep-photos-simon.s3-us-west-1.amazonaws.com/this_is_fine.jpg?AWSAccessKeyId=AKIAWXFXAIOZNZ3JFO7I&Signature=x1zrS4w4OTGAACd7yHp9mYqXvN8%3D&Expires=1587243398 Content-Type: application/xml Transfer-Encoding: chunked Date: Sat, 18 Apr 2020 20:47:21 GMT Server: AmazonS3 <?xml version="1.0" encoding="UTF-8"?> <Error><Code>TemporaryRedirect</Code><Message>Please re-send this request to the specified temporary endpoint. Continue to use the original request endpoint for future requests.</Message><Endpoint>dogsheep-photos-simon.s3-us-west-1.amazonaws.com</Endpoint><Bucket>dogsheep-photos-simon</Bucket><RequestId>E78CD859AEE21D33</RequestId><HostId>648mx+1+YSGga7NDOU7Q6isfsKnEPWOLC+DI4+x2o9FCc6pSCdIaoHJUbFMI8Vsuh1ADtx46ymU=</HostId></Error>~ $ ``` So it redirects to another URL... which returns this: ``` ~ $ curl -i 'https://dogsheep-photos-simon.s3-us-west-1.amazonaws.com/this_is_fine.jpg?AWSAccessKeyId=AKIAWXFXAIOZNZ3JFO7I&Signature=x1zrS4w4OTGAACd7yHp9mYqXvN8%3D&Expires=1587243398' HTTP/1.1 200 OK x-amz-id-2: XafOl6mswj3yz0GJC9+Ptot1ll5sROVwqsMc10CUUfgpaUANTdIx2GhnONb5d1GVFJ6wlS2j3UY= x-amz-request-id: 258387C180411AFE Date: Sat, 18 Apr 2020 20:47:52 GMT Last-Modified: Sat, 18 Apr 2020 20:37:35 GMT E… | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615945056 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615945056 | MDEyOklzc3VlQ29tbWVudDYxNTk0NTA1Ng== | 9599 | 2020-04-18T20:42:41Z | 2020-04-18T20:42:41Z | MEMBER | But... `list_objects` failed for both of my keys (read and write): ![Dogsheep_Photos_S3_access](https://user-images.githubusercontent.com/9599/79670798-75c41780-817a-11ea-9907-2cbc4a2e497c.png) | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615944806 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615944806 | MDEyOklzc3VlQ29tbWVudDYxNTk0NDgwNg== | 9599 | 2020-04-18T20:41:39Z | 2020-04-18T20:41:39Z | MEMBER | This worked! ![Dogsheep_Photos_S3_access](https://user-images.githubusercontent.com/9599/79670712-d868e380-8179-11ea-82a5-5dfd17356113.png) And this worked: ![Dogsheep_Photos_S3_access](https://user-images.githubusercontent.com/9599/79670777-50370e00-817a-11ea-83cd-18ebf5702878.png) | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615942116 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615942116 | MDEyOklzc3VlQ29tbWVudDYxNTk0MjExNg== | 9599 | 2020-04-18T20:30:56Z | 2020-04-18T20:30:56Z | MEMBER | Next step: attempt a programmatic upload using the `dogsheep-photos-simon-read-write` credentials from a Jupyter notebook. Also attempt a programmatic bucket listing and read using `dogsheep-photos-simon-read` credentials. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615941746 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615941746 | MDEyOklzc3VlQ29tbWVudDYxNTk0MTc0Ng== | 9599 | 2020-04-18T20:29:36Z | 2020-04-18T20:29:36Z | MEMBER | I'm going to create another user just for Transmit, with full S3 access. name: `dogsheep-photos-simon-s3-all-access` Rather than creating a group for that user, I'm trying the "Attach existing policies directly" option: ![IAM_Management_Console](https://user-images.githubusercontent.com/9599/79670182-03513880-8176-11ea-811a-c80aefb4538a.png) That user DID work with Transmit. I uploaded a test HEIC image. I used Transmit to copy a signed URL for it. ``` ~ $ curl -i 'https://dogsheep-photos-simon.s3.us-west-1.amazonaws.com/IMG_7195.HEIC?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAWXFXAI...' | head -n 100 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0HTTP/1.1 200 OK x-amz-id-2: gBOCYqZfbNAnv0R/uJ++qm2NbW5SgD4TapgF9RQjzzeDIThcCz/BkKU+YoxlG4NJHlcmMgAHyh4= x-amz-request-id: C2FE7FCC3BD53A84 Date: Sat, 18 Apr 2020 20:28:54 GMT Last-Modified: Sat, 18 Apr 2020 20:13:49 GMT ETag: "fe3e081239a123ef745517878c53b854" Accept-Ranges: bytes Content-Type: image/heic Content-Length: 1913097 Server: AmazonS3 ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615936880 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615936880 | MDEyOklzc3VlQ29tbWVudDYxNTkzNjg4MA== | 9599 | 2020-04-18T20:04:31Z | 2020-04-18T20:04:31Z | MEMBER | Next step: create two IAM users, one for each of those groups. https://console.aws.amazon.com/iam/home#/users$new?step=details ![IAM_Management_Console](https://user-images.githubusercontent.com/9599/79669931-1bc05380-8174-11ea-9657-0e0c6a692d42.png) ![IAM_Management_Console](https://user-images.githubusercontent.com/9599/79669941-27137f00-8174-11ea-8ce7-249f0d4f96f6.png) I copied the keys into a secure note in 1password. Couldn't get into Transmit with them though! https://library.panic.com/transmit/transmit5/iam-roles/ may help. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615935577 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615935577 | MDEyOklzc3VlQ29tbWVudDYxNTkzNTU3Nw== | 9599 | 2020-04-18T19:54:59Z | 2020-04-18T19:55:30Z | MEMBER | Creating IAM groups called `dogsheep-photos-simon-read-write` and `dogsheep-photos-simon-read`: https://console.aws.amazon.com/iam/home#/groups - I created them with no attached policies. Now I can attach an "inline policy" to each one. For the read-write group I go here: https://console.aws.amazon.com/iam/home#/groups/dogsheep-photos-simon-read-write ![IAM_Management_Console](https://user-images.githubusercontent.com/9599/79669703-2d086080-8172-11ea-9597-83e0b155193e.png) Example policies are here: https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html For the read-write one I went with: ```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::dogsheep-photos-simon/*" ] } ] } ``` For the read-only policy I'm going to guess that this is appropriate: ```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::dogsheep-photos-simon/*" ] } ] } ``` I tried the policy simulator to test this out: https://policysim.aws.amazon.com/home/index.jsp?#groups/dogsheep-photos-simon-read - this worked: ![IAM_Policy_Simulator](https://user-images.githubusercontent.com/9599/79669893-cd12b980-8173-11ea-8dfb-5660ce3652da.png) | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615933273 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615933273 | MDEyOklzc3VlQ29tbWVudDYxNTkzMzI3Mw== | 9599 | 2020-04-18T19:37:33Z | 2020-04-18T19:37:33Z | MEMBER | https://console.aws.amazon.com/s3/bucket/create?region=us-west-1 ![S3_Management_Console](https://user-images.githubusercontent.com/9599/79669552-33e2a380-8171-11ea-9ab5-5785d34f652a.png) I created it with no public read-write access. I plan to use signed URLs via a transforming proxy to access images for display on the web. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615932204 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615932204 | MDEyOklzc3VlQ29tbWVudDYxNTkzMjIwNA== | 9599 | 2020-04-18T19:29:22Z | 2020-04-18T19:34:44Z | MEMBER | I'm going to call my bucket `dogsheep-photos-simon`. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/4#issuecomment-615932007 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/4 | 615932007 | MDEyOklzc3VlQ29tbWVudDYxNTkzMjAwNw== | 9599 | 2020-04-18T19:27:55Z | 2020-04-18T19:27:55Z | MEMBER | Research thread: https://twitter.com/simonw/status/1249049694984011776 > I want to build some software that lets people store their own data in their own S3 bucket, but if possible I'd like not to have to teach people the incantations needed to get their bucket setup and minimum-permission credentials figures out https://testdriven.io/blog/storing-django-static-and-media-files-on-amazon-s3/ looks useful | { "total_count": 2, "+1": 2, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533539 | |
https://github.com/dogsheep/dogsheep-photos/issues/2#issuecomment-615931488 | https://api.github.com/repos/dogsheep/dogsheep-photos/issues/2 | 615931488 | MDEyOklzc3VlQ29tbWVudDYxNTkzMTQ4OA== | 9599 | 2020-04-18T19:24:02Z | 2020-04-18T19:24:02Z | MEMBER | I made a start on this last week with a https://github.com/simonw/heic-to-jpeg proxy. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602533352 | |
https://github.com/dogsheep/github-to-sqlite/issues/28#issuecomment-615886206 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/28 | 615886206 | MDEyOklzc3VlQ29tbWVudDYxNTg4NjIwNg== | 9599 | 2020-04-18T15:04:59Z | 2020-04-18T15:04:59Z | MEMBER | Demo: https://github-to-sqlite.dogsheep.net/github/contributors Documentation: https://github.com/dogsheep/github-to-sqlite/blob/13f8868fb5efa01c263b24f6dd91c617e6e938e1/README.md#fetching-contributors-to-a-repository | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601333634 | |
https://github.com/dogsheep/github-to-sqlite/issues/28#issuecomment-615883687 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/28 | 615883687 | MDEyOklzc3VlQ29tbWVudDYxNTg4MzY4Nw== | 9599 | 2020-04-18T14:49:58Z | 2020-04-18T14:49:58Z | MEMBER | That happened trying to pull contributors for `dogsheep/beta` - an empty repository. Turns out it was returning a `204 no content`: ``` ~ $ curl -i 'https://api.github.com/repos/dogsheep/beta/contributors' HTTP/1.1 204 No Content ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601333634 | |
https://github.com/dogsheep/github-to-sqlite/issues/28#issuecomment-615883040 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/28 | 615883040 | MDEyOklzc3VlQ29tbWVudDYxNTg4MzA0MA== | 9599 | 2020-04-18T14:45:38Z | 2020-04-18T14:45:38Z | MEMBER | ``` File "/opt/hostedtoolcache/Python/3.8.2/x64/lib/python3.8/site-packages/click/core.py", line 829, in __call__ return self.main(*args, **kwargs) File "/opt/hostedtoolcache/Python/3.8.2/x64/lib/python3.8/site-packages/click/core.py", line 782, in main rv = self.invoke(ctx) File "/opt/hostedtoolcache/Python/3.8.2/x64/lib/python3.8/site-packages/click/core.py", line 1259, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/opt/hostedtoolcache/Python/3.8.2/x64/lib/python3.8/site-packages/click/core.py", line 1066, in invoke return ctx.invoke(self.callback, **ctx.params) File "/opt/hostedtoolcache/Python/3.8.2/x64/lib/python3.8/site-packages/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/home/runner/work/github-to-sqlite/github-to-sqlite/github_to_sqlite/cli.py", line 219, in contributors utils.save_contributors(db, contributors, repo_full["id"]) File "/home/runner/work/github-to-sqlite/github-to-sqlite/github_to_sqlite/utils.py", line 354, in save_contributors for contributor in contributors: File "/home/runner/work/github-to-sqlite/github-to-sqlite/github_to_sqlite/utils.py", line 228, in fetch_contributors for contributors in paginate(url, headers): File "/home/runner/work/github-to-sqlite/github-to-sqlite/github_to_sqlite/utils.py", line 286, in paginate data = response.json() File "/opt/hostedtoolcache/Python/3.8.2/x64/lib/python3.8/site-packages/requests/models.py", line 898, in json return complexjson.loads(self.text, **kwargs) File "/opt/hostedtoolcache/Python/3.8.2/x64/lib/python3.8/json/__init__.py", line 357, in loads return _default_decoder.decode(s) File "/opt/hostedtoolcache/Python/3.8.2/x64/lib/python3.8/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/opt/hostedtoolcache/Python/3.8.2/x64/lib/python3.8/json/decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from N… | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601333634 | |
https://github.com/dogsheep/github-to-sqlite/issues/27#issuecomment-615519409 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/27 | 615519409 | MDEyOklzc3VlQ29tbWVudDYxNTUxOTQwOQ== | 9599 | 2020-04-18T00:19:16Z | 2020-04-18T00:19:16Z | MEMBER | ``` $ github-to-sqlite repos b.db dogsheep $ sqlite3 b.db '.schema repos' CREATE TABLE [repos] ( [id] INTEGER PRIMARY KEY, ... [permissions] TEXT, [organization] INTEGER REFERENCES [users]([id]), FOREIGN KEY(license) REFERENCES licenses(key) ); ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601330277 | |
https://github.com/dogsheep/github-to-sqlite/issues/27#issuecomment-615518606 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/27 | 615518606 | MDEyOklzc3VlQ29tbWVudDYxNTUxODYwNg== | 9599 | 2020-04-18T00:14:32Z | 2020-04-18T00:14:32Z | MEMBER | https://github.com/simonw/sqlite-utils/issues/100 is done and released in sqlite-utils 2.7. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601330277 | |
https://github.com/simonw/sqlite-utils/issues/89#issuecomment-615515867 | https://api.github.com/repos/simonw/sqlite-utils/issues/89 | 615515867 | MDEyOklzc3VlQ29tbWVudDYxNTUxNTg2Nw== | 9599 | 2020-04-18T00:00:41Z | 2020-04-18T00:00:41Z | OWNER | Yes pleas, I'd love to see that pull request! | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
573578548 | |
https://github.com/dogsheep/twitter-to-sqlite/issues/43#issuecomment-615513491 | https://api.github.com/repos/dogsheep/twitter-to-sqlite/issues/43 | 615513491 | MDEyOklzc3VlQ29tbWVudDYxNTUxMzQ5MQ== | 9599 | 2020-04-17T23:48:28Z | 2020-04-17T23:48:28Z | MEMBER | Released in 0.21. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
602176870 | |
https://github.com/dogsheep/twitter-to-sqlite/issues/37#issuecomment-615510361 | https://api.github.com/repos/dogsheep/twitter-to-sqlite/issues/37 | 615510361 | MDEyOklzc3VlQ29tbWVudDYxNTUxMDM2MQ== | 9599 | 2020-04-17T23:38:27Z | 2020-04-17T23:38:27Z | MEMBER | That's a bit tricky since I'd have to rewrite the internals of a bunch of other commands. For the moment I'll exit the script with an error but at least it will be a decent error! | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
585353598 | |
https://github.com/dogsheep/twitter-to-sqlite/issues/37#issuecomment-615509803 | https://api.github.com/repos/dogsheep/twitter-to-sqlite/issues/37 | 615509803 | MDEyOklzc3VlQ29tbWVudDYxNTUwOTgwMw== | 9599 | 2020-04-17T23:36:40Z | 2020-04-17T23:36:40Z | MEMBER | I'm going to print a warning to stderr, skip and continue - because if you have 100 screen names and only one of them is invalid you should still execute for the other 99. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
585353598 | |
https://github.com/dogsheep/twitter-to-sqlite/issues/37#issuecomment-615509578 | https://api.github.com/repos/dogsheep/twitter-to-sqlite/issues/37 | 615509578 | MDEyOklzc3VlQ29tbWVudDYxNTUwOTU3OA== | 9599 | 2020-04-17T23:36:00Z | 2020-04-17T23:36:00Z | MEMBER | ``` $ twitter-to-sqlite user-timeline doggo.db doggoenthuonetuh Traceback (most recent call last): ... File "/Users/simonw/Dropbox/Development/twitter-to-sqlite/twitter_to_sqlite/utils.py", line 272, in transform_user user["created_at"] = parser.parse(user["created_at"]) KeyError: 'created_at' ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
585353598 | |
https://github.com/simonw/sqlite-utils/issues/100#issuecomment-615372322 | https://api.github.com/repos/simonw/sqlite-utils/issues/100 | 615372322 | MDEyOklzc3VlQ29tbWVudDYxNTM3MjMyMg== | 9599 | 2020-04-17T17:31:42Z | 2020-04-17T17:31:42Z | OWNER | I'm going with `columns={"score": int}` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601358649 | |
https://github.com/dogsheep/github-to-sqlite/issues/27#issuecomment-614843406 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/27 | 614843406 | MDEyOklzc3VlQ29tbWVudDYxNDg0MzQwNg== | 9599 | 2020-04-16T19:11:53Z | 2020-04-16T19:20:23Z | MEMBER | This didn't quite work: the column type is incorrect, so the foreign key relationship isn't sticking: https://github-to-sqlite.dogsheep.net/github/repos?organization=53015001 `[organization] TEXT REFERENCES [users]([id])` - should be `INTEGER`. The problem is that if the first repo inserted has no organization it's set to `null`, which `sqlite-utils` derives as a `TEXT` column. One solution would be to create the column explicitly with a type, but this could get messy. I think I want a new sqlite-utils feature for this instead. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601330277 | |
https://github.com/simonw/sqlite-utils/issues/100#issuecomment-614846059 | https://api.github.com/repos/simonw/sqlite-utils/issues/100 | 614846059 | MDEyOklzc3VlQ29tbWVudDYxNDg0NjA1OQ== | 9599 | 2020-04-16T19:17:56Z | 2020-04-16T19:17:56Z | OWNER | Reminder: the current list of arguments for those methods is: https://github.com/simonw/sqlite-utils/blob/13528faa817d79bc3900d3af7473300686b145d7/sqlite_utils/db.py#L951-L967 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601358649 | |
https://github.com/simonw/sqlite-utils/issues/100#issuecomment-614845657 | https://api.github.com/repos/simonw/sqlite-utils/issues/100 | 614845657 | MDEyOklzc3VlQ29tbWVudDYxNDg0NTY1Nw== | 9599 | 2020-04-16T19:17:05Z | 2020-04-16T19:17:05Z | OWNER | The syntax for explicitly creating a table looks like this: ```python db["cats"].create({ "id": int, "name": str, "weight": float, }, pk="id") ``` So using a dictionary of column name -> Python type here would be good. I think it becomes a new optional argument to `.insert_all()` and `.insert()` and `.upsert_all()` and `.upsert()`. Question is, what should that argument be called? Options: - `columns` - `types` - `type_overrides` - `extra_columns` I like the first two best. I'm leaning towards `columns` - it would serve two purposes: you can use it to ensure extra columns are created, and you can use it to specify the type on extra OR deteced columns. Maybe something like this: ```python db["authors"].insert_all( [{"id": 1, "name": "Sally", "score": "2"}], pk="id", not_null={"name", "score"}, defaults={"score": 1}, columns={"score": int, "weight": float} ) ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601358649 | |
https://github.com/dogsheep/github-to-sqlite/issues/27#issuecomment-614831842 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/27 | 614831842 | MDEyOklzc3VlQ29tbWVudDYxNDgzMTg0Mg== | 9599 | 2020-04-16T18:48:18Z | 2020-04-16T18:48:18Z | MEMBER | I'm going to make `organization` another foreign key to the `users` table just in case it IS possible (maybe with GitHub Enterprise or similar?) | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601330277 | |
https://github.com/dogsheep/github-to-sqlite/issues/27#issuecomment-614831451 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/27 | 614831451 | MDEyOklzc3VlQ29tbWVudDYxNDgzMTQ1MQ== | 9599 | 2020-04-16T18:47:25Z | 2020-04-16T18:47:25Z | MEMBER | Is it possible for a repo to have an `owner` that differs from its `organization`? | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601330277 | |
https://github.com/dogsheep/github-to-sqlite/issues/25#issuecomment-614810417 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/25 | 614810417 | MDEyOklzc3VlQ29tbWVudDYxNDgxMDQxNw== | 9599 | 2020-04-16T18:07:11Z | 2020-04-16T18:07:11Z | MEMBER | Turns out the main problem was #26 - now fixed. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601265023 | |
https://github.com/dogsheep/github-to-sqlite/issues/26#issuecomment-614795712 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/26 | 614795712 | MDEyOklzc3VlQ29tbWVudDYxNDc5NTcxMg== | 9599 | 2020-04-16T17:40:27Z | 2020-04-16T17:40:27Z | MEMBER | Aha! it was missing from the `fetch_repo()` function. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601271612 | |
https://github.com/dogsheep/github-to-sqlite/issues/26#issuecomment-614794739 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/26 | 614794739 | MDEyOklzc3VlQ29tbWVudDYxNDc5NDczOQ== | 9599 | 2020-04-16T17:38:28Z | 2020-04-16T17:38:28Z | MEMBER | I'm already doing this here: https://github.com/dogsheep/github-to-sqlite/blob/c4aaa50e167cfa9021c7c94260bc3e89e10947bf/github_to_sqlite/utils.py#L246-L250 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
601271612 | |
https://github.com/simonw/sqlite-utils/issues/76#issuecomment-614400533 | https://api.github.com/repos/simonw/sqlite-utils/issues/76 | 614400533 | MDEyOklzc3VlQ29tbWVudDYxNDQwMDUzMw== | 9599 | 2020-04-16T03:51:26Z | 2020-04-16T03:51:26Z | OWNER | Documentation here: https://sqlite-utils.readthedocs.io/en/stable/python-api.html#listing-rows | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
549287310 | |
https://github.com/simonw/sqlite-utils/issues/76#issuecomment-614400454 | https://api.github.com/repos/simonw/sqlite-utils/issues/76 | 614400454 | MDEyOklzc3VlQ29tbWVudDYxNDQwMDQ1NA== | 9599 | 2020-04-16T03:51:01Z | 2020-04-16T03:51:01Z | OWNER | Released in 2.6 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
549287310 | |
https://github.com/simonw/sqlite-utils/issues/76#issuecomment-614354219 | https://api.github.com/repos/simonw/sqlite-utils/issues/76 | 614354219 | MDEyOklzc3VlQ29tbWVudDYxNDM1NDIxOQ== | 9599 | 2020-04-16T01:01:34Z | 2020-04-16T01:01:34Z | OWNER | I think a neat way to do this would be with an optional argument for `.rows_where()`: ```python rows = db["table"].rows_where("age > 10", order_by="age desc") ``` If you want everything you can use this: ```python rows = db["table"].rows_where(order_by="age desc") ``` It's a tiny bit weird calling `.rows_where()` without a where clause, but I think it makes sense here - especially since `.rows` is a property that can't take any arguments - though under the hood it actually does this: https://github.com/simonw/sqlite-utils/blob/ad6ac19470a67867b96cb4c086450b8e4e46bf02/sqlite_utils/db.py#L436-L443 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
549287310 | |
https://github.com/simonw/datasette/issues/727#issuecomment-614283842 | https://api.github.com/repos/simonw/datasette/issues/727 | 614283842 | MDEyOklzc3VlQ29tbWVudDYxNDI4Mzg0Mg== | 9599 | 2020-04-15T21:14:57Z | 2020-04-15T21:14:57Z | OWNER | https://datasette.readthedocs.io/en/latest/custom_templates.html#css-classes-on-the-body has the updated documentation. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
600583271 | |
https://github.com/simonw/datasette/issues/727#issuecomment-614282980 | https://api.github.com/repos/simonw/datasette/issues/727 | 614282980 | MDEyOklzc3VlQ29tbWVudDYxNDI4Mjk4MA== | 9599 | 2020-04-15T21:13:00Z | 2020-04-15T21:13:00Z | OWNER | https://latest.datasette.io/fixtures/neighborhood_search now has the following: ```html <body class="query db-fixtures query-neighborhood_search"> ``` | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
600583271 | |
https://github.com/simonw/datasette/issues/727#issuecomment-614278078 | https://api.github.com/repos/simonw/datasette/issues/727 | 614278078 | MDEyOklzc3VlQ29tbWVudDYxNDI3ODA3OA== | 9599 | 2020-04-15T21:01:44Z | 2020-04-15T21:01:44Z | OWNER | And here's the test: https://github.com/simonw/datasette/blob/d349d57cdf3d577afb62bdf784af342a4d5be660/tests/test_html.py#L433-L456 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
600583271 | |
https://github.com/simonw/datasette/issues/727#issuecomment-614276988 | https://api.github.com/repos/simonw/datasette/issues/727 | 614276988 | MDEyOklzc3VlQ29tbWVudDYxNDI3Njk4OA== | 9599 | 2020-04-15T20:59:17Z | 2020-04-15T20:59:45Z | OWNER | Relevant code: https://github.com/simonw/datasette/blob/d349d57cdf3d577afb62bdf784af342a4d5be660/datasette/templates/query.html#L19 Compare with: https://github.com/simonw/datasette/blob/d349d57cdf3d577afb62bdf784af342a4d5be660/datasette/templates/table.html#L17 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
600583271 | |
https://github.com/simonw/datasette/issues/727#issuecomment-614276522 | https://api.github.com/repos/simonw/datasette/issues/727 | 614276522 | MDEyOklzc3VlQ29tbWVudDYxNDI3NjUyMg== | 9599 | 2020-04-15T20:58:14Z | 2020-04-15T20:58:45Z | OWNER | Compare with this table page https://latest.datasette.io/fixtures/complex_foreign_keys which has: ```html <body class="table db-fixtures table-complex_foreign_keys"> ``` So in the above example the extra class should be `query-neighborhood_search`. | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
600583271 | |
https://github.com/simonw/datasette/issues/514#issuecomment-614111094 | https://api.github.com/repos/simonw/datasette/issues/514 | 614111094 | MDEyOklzc3VlQ29tbWVudDYxNDExMTA5NA== | 9599 | 2020-04-15T15:32:49Z | 2020-04-15T15:32:49Z | OWNER | Relevant: https://github.com/simonw/datasette-auth-github/issues/61 | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
459397625 | |
https://github.com/dogsheep/github-to-sqlite/issues/14#issuecomment-613641947 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/14 | 613641947 | MDEyOklzc3VlQ29tbWVudDYxMzY0MTk0Nw== | 9599 | 2020-04-14T19:38:24Z | 2020-04-14T19:38:34Z | MEMBER | Since events include payloads with full object representations in them (for issues, repos and more) running this command every few minutes may be all it takes to keep a constant copy of everything updated in a very rate-limit friendly manner (thanks to the ETags). | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
530491074 | |
https://github.com/dogsheep/github-to-sqlite/issues/16#issuecomment-613611455 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/16 | 613611455 | MDEyOklzc3VlQ29tbWVudDYxMzYxMTQ1NQ== | 9599 | 2020-04-14T18:37:21Z | 2020-04-14T18:37:21Z | MEMBER | This should have been fixed by #20 and #23 @jayvdb I'm definitely interested in this tool working as a library - it's purely designed as a CLI tool at the moment, but cleaning it up to work better as a dependency is totally in-scope for the project. https://sqlite-utils.readthedocs.io/ is an example of a tool I've built that works for both. Feel free to open a new issue here with some notes on what you would need for this to work as a library for your project! | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
546051181 | |
https://github.com/simonw/sqlite-utils/issues/97#issuecomment-612738311 | https://api.github.com/repos/simonw/sqlite-utils/issues/97 | 612738311 | MDEyOklzc3VlQ29tbWVudDYxMjczODMxMQ== | 9599 | 2020-04-13T03:55:11Z | 2020-04-13T03:55:11Z | OWNER | Shipped in 2.5 - documentation is here: https://sqlite-utils.readthedocs.io/en/stable/python-api.html#connecting-to-or-creating-a-database | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
593751293 | |
https://github.com/simonw/sqlite-utils/issues/97#issuecomment-612732453 | https://api.github.com/repos/simonw/sqlite-utils/issues/97 | 612732453 | MDEyOklzc3VlQ29tbWVudDYxMjczMjQ1Mw== | 9599 | 2020-04-13T03:26:46Z | 2020-04-13T03:26:46Z | OWNER | I wonder if it should delete an recreate the file or if it would be safer to drop every table instead? Dropping tables gets messy: then you need to drop triggers and views, and you need to run `vacuum` to clean up the space. My worry with deleting and recreating the file is that it could trigger errors in other processes that are currently attached to that database file. But... if you know that's going to be likely, maybe you shouldn't use the `recreate=True` feature? | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
593751293 |