home / github

Menu
  • Search all tables
  • GraphQL API

issue_comments

Table actions
  • GraphQL API for issue_comments

23 rows where "created_at" is on date 2021-11-14 and user = 9599 sorted by updated_at descending

✎ View and edit SQL

This data as json, CSV (advanced)

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

issue 7

  • sqlite-utils index-foreign-keys fails due to pre-existing index 11
  • ReadTheDocs build failed for 0.59.2 release 6
  • Mypy error: found module but no type hints or library stubs 2
  • Use python-dateutil package instead of dateutils 1
  • `sqlite-utils memory --flatten` option to flatten nested JSON 1
  • `?_nocol=` removes that column from the filter interface 1
  • Columns beginning with an underscore do not facet correctly 1

user 1

  • simonw · 23 ✖

author_association 1

  • OWNER 23
id html_url issue_url node_id user created_at updated_at ▲ author_association body reactions issue performed_via_github_app
968384988 https://github.com/simonw/sqlite-utils/pull/324#issuecomment-968384988 https://api.github.com/repos/simonw/sqlite-utils/issues/324 IC_kwDOCGYnMM45uGHc simonw 9599 2021-11-14T23:25:16Z 2021-11-14T23:25:16Z OWNER

Yes this was absolutely the intention! Thanks, I wonder how often I've made that mistake in other projects?

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Use python-dateutil package instead of dateutils 988013247  
968384005 https://github.com/simonw/sqlite-utils/issues/331#issuecomment-968384005 https://api.github.com/repos/simonw/sqlite-utils/issues/331 IC_kwDOCGYnMM45uF4F simonw 9599 2021-11-14T23:19:29Z 2021-11-14T23:20:32Z OWNER

Tested it like this, against a freshly built .tar.gz package from my development environment: (w) w % mypy . hello.py:1: error: Skipping analyzing "sqlite_utils": found module but no type hints or library stubs hello.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports Found 1 error in 1 file (checked 1 source file) (w) w % pip install ~/Dropbox/Development/sqlite-utils/dist/sqlite-utils-3.17.1.tar.gz Processing /Users/simon/Dropbox/Development/sqlite-utils/dist/sqlite-utils-3.17.1.tar.gz ... Successfully installed sqlite-utils-3.17.1 (w) w % mypy . Success: no issues found in 1 source file I tested against the .whl too.

My hello.py script contained this: ```python import sqlite_utils from typing import cast

if name == "main": db = sqlite_utils.Database(memory=True) table = cast(sqlite_utils.db.Table, db["foo"]) table.insert({"id": 5}) print(list(db.query("select * from foo"))) That `cast()` is necessary because without it you get this error: (w) w % mypy . hello.py:7: error: Item "View" of "Union[Table, View]" has no attribute "insert" ```

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Mypy error: found module but no type hints or library stubs 1026794056  
968381939 https://github.com/simonw/sqlite-utils/issues/331#issuecomment-968381939 https://api.github.com/repos/simonw/sqlite-utils/issues/331 IC_kwDOCGYnMM45uFXz simonw 9599 2021-11-14T23:06:20Z 2021-11-14T23:06:20Z OWNER

Thanks - I didn't know this was needed!

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Mypy error: found module but no type hints or library stubs 1026794056  
968380675 https://github.com/simonw/sqlite-utils/issues/332#issuecomment-968380675 https://api.github.com/repos/simonw/sqlite-utils/issues/332 IC_kwDOCGYnMM45uFED simonw 9599 2021-11-14T22:57:56Z 2021-11-14T22:57:56Z OWNER

This is a great idea.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
`sqlite-utils memory --flatten` option to flatten nested JSON 1028056713  
968380387 https://github.com/simonw/sqlite-utils/issues/335#issuecomment-968380387 https://api.github.com/repos/simonw/sqlite-utils/issues/335 IC_kwDOCGYnMM45uE_j simonw 9599 2021-11-14T22:55:56Z 2021-11-14T22:55:56Z OWNER

OK, this should fix it.

{
    "total_count": 1,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 1,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
sqlite-utils index-foreign-keys fails due to pre-existing index 1042569687  
968371112 https://github.com/simonw/sqlite-utils/issues/335#issuecomment-968371112 https://api.github.com/repos/simonw/sqlite-utils/issues/335 IC_kwDOCGYnMM45uCuo simonw 9599 2021-11-14T21:57:43Z 2021-11-14T22:21:31Z OWNER

create_index(..., find_unique_name=) is good. Default to false. index_foreign_keys can set it to true.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
sqlite-utils index-foreign-keys fails due to pre-existing index 1042569687  
968361671 https://github.com/simonw/sqlite-utils/issues/335#issuecomment-968361671 https://api.github.com/repos/simonw/sqlite-utils/issues/335 IC_kwDOCGYnMM45uAbH simonw 9599 2021-11-14T20:54:53Z 2021-11-14T21:01:14Z OWNER

I'm leaning towards table.create_index(columns, ignore_existing_name=True) now.

Or resolve_existing_name - or skip_existing_name?

"ignore" sounds like it might not create the index if the name exists, but we want to still create the index but pick a new name.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
sqlite-utils index-foreign-keys fails due to pre-existing index 1042569687  
968362285 https://github.com/simonw/sqlite-utils/issues/335#issuecomment-968362285 https://api.github.com/repos/simonw/sqlite-utils/issues/335 IC_kwDOCGYnMM45uAkt simonw 9599 2021-11-14T20:59:44Z 2021-11-14T20:59:44Z OWNER

I think I'll attempt to create the index and re-try if it fails with that error.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
sqlite-utils index-foreign-keys fails due to pre-existing index 1042569687  
968362214 https://github.com/simonw/sqlite-utils/issues/335#issuecomment-968362214 https://api.github.com/repos/simonw/sqlite-utils/issues/335 IC_kwDOCGYnMM45uAjm simonw 9599 2021-11-14T20:59:15Z 2021-11-14T20:59:15Z OWNER

How to figure out if an index name is already in use? PRAGMA index_list(t) requires a table name. This does it:

sql SELECT name FROM sqlite_master WHERE type = 'index';

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
sqlite-utils index-foreign-keys fails due to pre-existing index 1042569687  
968361409 https://github.com/simonw/sqlite-utils/issues/335#issuecomment-968361409 https://api.github.com/repos/simonw/sqlite-utils/issues/335 IC_kwDOCGYnMM45uAXB simonw 9599 2021-11-14T20:52:55Z 2021-11-14T20:52:55Z OWNER

Looking at the method signature: https://github.com/simonw/sqlite-utils/blob/92aa5c9c5d26b0889c8c3d97c76a908d5f8af211/sqlite_utils/db.py#L1518-L1524

if_not_exists just adds a IF NOT EXISTS clause here: https://github.com/simonw/sqlite-utils/blob/92aa5c9c5d26b0889c8c3d97c76a908d5f8af211/sqlite_utils/db.py#L1549-L1561

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
sqlite-utils index-foreign-keys fails due to pre-existing index 1042569687  
968361285 https://github.com/simonw/sqlite-utils/issues/335#issuecomment-968361285 https://api.github.com/repos/simonw/sqlite-utils/issues/335 IC_kwDOCGYnMM45uAVF simonw 9599 2021-11-14T20:51:57Z 2021-11-14T20:51:57Z OWNER

SQLite will happily create multiple identical indexes on a table, using more disk space each time: ```pycon

import sqlite_utils db = sqlite_utils.Database("dupes.db") db["t"].insert_all({"id": i} for i in range(10000))

<Table t (id)> # dupes.db is 98304 bytes >>> db["t"].create_index(["id"]) <Table t (id)> # dupes.db is 204800 bytes >>> db["t"].indexes [Index(seq=0, name='idx_t_id', unique=0, origin='c', partial=0, columns=['id'])] >>> db["t"].create_index(["id"], index_name="t_idx_t_id_2") <Table t (id)> # 311296 bytes >>> db["t"].create_index(["id"], index_name="t_idx_t_id_3") <Table t (id)> # 417792 bytes >>> db.vacuum() # Still 417792 bytes ```
{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
sqlite-utils index-foreign-keys fails due to pre-existing index 1042569687  
968360538 https://github.com/simonw/sqlite-utils/issues/335#issuecomment-968360538 https://api.github.com/repos/simonw/sqlite-utils/issues/335 IC_kwDOCGYnMM45uAJa simonw 9599 2021-11-14T20:46:56Z 2021-11-14T20:46:56Z OWNER

I'm tempted to not provide an opt-out option either: if you call table.create_index(...) without specifying an index name I think the tool should create the index for you, quietly picking an index name that works.

But... it feels wasteful to create an index that exactly duplicates an existing index. Would SQLite even let you do that or would it notice and NOT double the amount of disk space used for that index?

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
sqlite-utils index-foreign-keys fails due to pre-existing index 1042569687  
968360387 https://github.com/simonw/sqlite-utils/issues/335#issuecomment-968360387 https://api.github.com/repos/simonw/sqlite-utils/issues/335 IC_kwDOCGYnMM45uAHD simonw 9599 2021-11-14T20:45:44Z 2021-11-14T20:45:44Z OWNER

What would such an option be called? Some options:

  • table.create_index([fk.column], force=True) - not obvious what force means here
  • table.create_index([fk.column], ignore_existing_name=True) - not obvious what ignore means here
  • table.create_index([fk.column], pick_unique_name=True) - bit verbose

If the user doesn't pass in an explicit name it seems like their intent is "just create me the index, I don't care what name you use" - so actually perhaps the default behaviour here should be to pick a new unique name if that name is already in use.

Then maybe there should be an option to disable that - some options there:

  • table.create_index([fk.column], error_on_existing_index_name=True) - too verbose
  • table.create_index([fk.column], force=False) - not clear what force means
{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
sqlite-utils index-foreign-keys fails due to pre-existing index 1042569687  
968359868 https://github.com/simonw/sqlite-utils/issues/335#issuecomment-968359868 https://api.github.com/repos/simonw/sqlite-utils/issues/335 IC_kwDOCGYnMM45t_-8 simonw 9599 2021-11-14T20:41:42Z 2021-11-14T20:41:42Z OWNER

The "index idx_generators_eia860_report_date already exists" error suggests that the problem here is actually one of an index name collision.

python table.create_index([fk.column]) This will derive a name for the index automatically from the name of the table and the name of the passed in columns: https://github.com/simonw/sqlite-utils/blob/92aa5c9c5d26b0889c8c3d97c76a908d5f8af211/sqlite_utils/db.py#L1536-L1539

So perhaps .create_index() should grow an extra option that creates the index even if the name already exists, by finding a new name.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
sqlite-utils index-foreign-keys fails due to pre-existing index 1042569687  
968359137 https://github.com/simonw/sqlite-utils/issues/335#issuecomment-968359137 https://api.github.com/repos/simonw/sqlite-utils/issues/335 IC_kwDOCGYnMM45t_zh simonw 9599 2021-11-14T20:37:00Z 2021-11-14T20:37:00Z OWNER

This is strange - the code already checks that an index doesn't exist before attempting to create it: https://github.com/simonw/sqlite-utils/blob/92aa5c9c5d26b0889c8c3d97c76a908d5f8af211/sqlite_utils/db.py#L893-L902

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
sqlite-utils index-foreign-keys fails due to pre-existing index 1042569687  
968210842 https://github.com/simonw/datasette/issues/1507#issuecomment-968210842 https://api.github.com/repos/simonw/datasette/issues/1507 IC_kwDOBm6k_c45tbma simonw 9599 2021-11-14T05:41:55Z 2021-11-14T05:41:55Z OWNER

Here's the build with that fix: https://readthedocs.org/projects/datasette/builds/15268498/

It passed and published the docs: https://docs.datasette.io/en/latest/changelog.html

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
ReadTheDocs build failed for 0.59.2 release 1052851176  
968210222 https://github.com/simonw/datasette/issues/1507#issuecomment-968210222 https://api.github.com/repos/simonw/datasette/issues/1507 IC_kwDOBm6k_c45tbcu simonw 9599 2021-11-14T05:34:14Z 2021-11-14T05:34:14Z OWNER

Here's the new build using Python 3: https://readthedocs.org/projects/datasette/builds/15268482/

It's still broken. Here's one of many issue threads about it, this one has a workaround fix: https://github.com/readthedocs/readthedocs.org/issues/8616#issuecomment-952034858

For future readers, the solution for this problem is to pin docutils<0.18 in your requirements.txt file, and have a .readthedocs.yaml file with these contents:

``` version: 2

python: install: - requirements: docs/requirements.txt ```

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
ReadTheDocs build failed for 0.59.2 release 1052851176  
968209957 https://github.com/simonw/datasette/issues/1507#issuecomment-968209957 https://api.github.com/repos/simonw/datasette/issues/1507 IC_kwDOBm6k_c45tbYl simonw 9599 2021-11-14T05:31:07Z 2021-11-14T05:31:07Z OWNER

Looks like ReadTheDocs builds started failing for latest a few weeks ago:

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
ReadTheDocs build failed for 0.59.2 release 1052851176  
968209731 https://github.com/simonw/datasette/issues/1507#issuecomment-968209731 https://api.github.com/repos/simonw/datasette/issues/1507 IC_kwDOBm6k_c45tbVD simonw 9599 2021-11-14T05:28:41Z 2021-11-14T05:28:41Z OWNER

I will try adding a .readthedocs.yml file: https://docs.readthedocs.io/en/stable/config-file/v2.html#python-version

This might work:

``` version: 2

build: os: ubuntu-20.04 tools: python: "3.9"

sphinx: configuration: docs/conf.py ```

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
ReadTheDocs build failed for 0.59.2 release 1052851176  
968209616 https://github.com/simonw/datasette/issues/1507#issuecomment-968209616 https://api.github.com/repos/simonw/datasette/issues/1507 IC_kwDOBm6k_c45tbTQ simonw 9599 2021-11-14T05:27:22Z 2021-11-14T05:27:22Z OWNER

https://blog.readthedocs.com/default-python-3/ they started defaulting new projects to Python 3 back in Feb 2019 but clearly my project was created before then.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
ReadTheDocs build failed for 0.59.2 release 1052851176  
968209560 https://github.com/simonw/datasette/issues/1507#issuecomment-968209560 https://api.github.com/repos/simonw/datasette/issues/1507 IC_kwDOBm6k_c45tbSY simonw 9599 2021-11-14T05:26:36Z 2021-11-14T05:26:36Z OWNER

It looks like my builds there still run on Python 2!

git clone --no-single-branch --depth 50 https://github.com/simonw/datasette . git checkout --force de1e031713f47fbd51eb7239db3e7e6025fbf81a git clean -d -f -f python2.7 -mvirtualenv /home/docs/checkouts/readthedocs.org/user_builds/datasette/envs/0.59.2 /home/docs/checkouts/readthedocs.org/user_builds/datasette/envs/0.59.2/bin/python -m pip install --upgrade --no-cache-dir pip setuptools /home/docs/checkouts/readthedocs.org/user_builds/datasette/envs/0.59.2/bin/python -m pip install --upgrade --no-cache-dir mock==1.0.1 pillow==5.4.1 alabaster>=0.7,<0.8,!=0.7.5 commonmark==0.8.1 recommonmark==0.5.0 sphinx<2 sphinx-rtd-theme<0.5 readthedocs-sphinx-ext<2.2 cat docs/conf.py

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
ReadTheDocs build failed for 0.59.2 release 1052851176  
968207906 https://github.com/simonw/datasette/issues/1503#issuecomment-968207906 https://api.github.com/repos/simonw/datasette/issues/1503 IC_kwDOBm6k_c45ta4i simonw 9599 2021-11-14T05:08:26Z 2021-11-14T05:08:26Z OWNER

Error: ``` def test_table_html_filter_form_column_options( path, expected_column_options, app_client ): response = app_client.get(path) assert response.status == 200 form = Soup(response.body, "html.parser").find("form") column_options = [ o.attrs.get("value") or o.string for o in form.select("select[name=_filter_column] option") ]

  assert expected_column_options == column_options

E AssertionError: assert ['- column -'...wid', 'value'] == ['- column -', 'value'] E At index 1 diff: 'rowid' != 'value' E Left contains one more item: 'value' E Use -v to get the full diff `` This is becauserowid` isn't a table column but IS returned by the query used on that page.

My solution: start with the query columns, but then add any table columns that were not already returned by the query to the end of the filter_columns list.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
`?_nocol=` removes that column from the filter interface 1050163432  
968192980 https://github.com/simonw/datasette/issues/1506#issuecomment-968192980 https://api.github.com/repos/simonw/datasette/issues/1506 IC_kwDOBm6k_c45tXPU simonw 9599 2021-11-14T02:22:40Z 2021-11-14T02:22:40Z OWNER

I think the answer is to spot this case and link to ?_item_exact=x instead of ?_item=x - it looks like that's already recommended in the documentation here: https://docs.datasette.io/en/stable/json_api.html#column-filter-arguments

?column__exact=value or ?_column=value Returns rows where the specified column exactly matches the value.

So maybe the facet selection rendering logic needs to spot this and link correctly to it?

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Columns beginning with an underscore do not facet correctly 1052826038  

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 575.887ms · About: github-to-sqlite