issue_comments
10,495 rows sorted by updated_at descending
This data as json, CSV (advanced)
issue >1000
- Show column metadata plus links for foreign keys on arbitrary query results 50
- Redesign default .json format 48
- Rethink how .ext formats (v.s. ?_format=) works before 1.0 48
- JavaScript plugin hooks mechanism similar to pluggy 47
- Updated Dockerfile with SpatiaLite version 5.0 45
- Complete refactor of TableView and table.html template 45
- Port Datasette to ASGI 42
- Authentication (and permissions) as a core concept 40
- Deploy a live instance of demos/apache-proxy 34
- await datasette.client.get(path) mechanism for executing internal requests 33
- Maintain an in-memory SQLite table of connected databases and their tables 32
- Ability to sort (and paginate) by column 31
- Research: demonstrate if parallel SQL queries are worthwhile 31
- link_or_copy_directory() error - Invalid cross-device link 28
- Export to CSV 27
- base_url configuration setting 27
- Documentation with recommendations on running Datasette in production without using Docker 27
- Optimize all those calls to index_list and foreign_key_list 27
- Support cross-database joins 26
- Ability for a canned query to write to the database 26
- table.transform() method for advanced alter table 26
- New pattern for views that return either JSON or HTML, available for plugins 26
- Proof of concept for Datasette on AWS Lambda with EFS 25
- WIP: Add Gmail takeout mbox import 25
- Redesign register_output_renderer callback 24
- Make it easier to insert geometries, with documentation and maybe code 24
- "datasette insert" command and plugin hook 23
- Datasette Plugins 22
- .json and .csv exports fail to apply base_url 22
- Idea: import CSV to memory, run SQL, export in a single command 22
- Plugin hook for dynamic metadata 22
- base_url is omitted in JSON and CSV views 22
- Handle spatialite geometry columns better 21
- table.extract(...) method and "sqlite-utils extract" command 21
- Database page loads too slowly with many large tables (due to table counts) 21
- ?sort=colname~numeric to sort by by column cast to real 21
- "flash messages" mechanism 20
- Move CI to GitHub Issues 20
- load_template hook doesn't work for include/extends 20
- Mechanism for storing metadata in _metadata tables 20
- Introduce concept of a database `route`, separate from its name 20
- Better way of representing binary data in .csv output 19
- Introspect if table is FTS4 or FTS5 19
- A proper favicon 19
- Package as standalone binary 18
- Ability to ship alpha and beta releases 18
- Magic parameters for canned queries 18
- Support column descriptions in metadata.json 18
- datasette.client internal requests mechanism 18
- Figure out why SpatiaLite 5.0 hangs the database page on Linux 18
- Publish to Docker Hub failing with "libcrypt.so.1: cannot open shared object file" 17
- Facets 16
- ?_col= and ?_nocol= support for toggling columns on table view 16
- Support "allow" block on root, databases and tables, not just queries 16
- Action menu for table columns 16
- Make it possible to download BLOB data from the Datasette UI 16
- `--batch-size 1` doesn't seem to commit for every item 16
- create-index should run analyze after creating index 16
- Add new spatialite helper methods 16
- Switch documentation theme to Furo 16
- Bug: Sort by column with NULL in next_page URL 15
- Mechanism for customizing the SQL used to select specific columns in the table view 15
- The ".upsert()" method is misnamed 15
- --dirs option for scanning directories for SQLite databases 15
- Document (and reconsider design of) Database.execute() and Database.execute_against_connection_in_thread() 15
- latest.datasette.io is no longer updating 15
- "sqlite-utils convert" command to replace the separate "sqlite-transform" tool 15
- --lines and --text and --convert and --import 15
- Ability to customize presentation of specific columns in HTML view 14
- Allow plugins to define additional URL routes and views 14
- "Invalid SQL" page should let you edit the SQL 14
- .execute_write() and .execute_write_fn() methods on Database 14
- Upload all my photos to a secure S3 bucket 14
- Canned query permissions mechanism 14
- Incorrect URLs when served behind a proxy with base_url set 14
- "datasette -p 0 --root" gives the wrong URL 14
- Plugin hook for loading templates 14
- sqlite-utils extract could handle nested objects 14
- Advanced class-based `conversions=` mechanism 14
- Design plugin hook for extras 14
- Dockerfile should build more recent SQLite with FTS5 and spatialite support 13
- Fix all the places that currently use .inspect() data 13
- Plugin hook: filters_from_request 13
- Get Datasette tests passing on Windows in GitHub Actions 13
- If you apply ?_facet_array=tags then &_facet=tags does nothing 13
- Mechanism for adding arbitrary pages like /about 13
- Prototoype for Datasette on PostgreSQL 13
- Import machine-learning detected labels (dog, llama etc) from Apple Photos 13
- Mechanism for skipping CSRF checks on API posts 13
- table.transform() method 13
- Policy on documenting "public" datasette.utils functions 13
- Async support 13
- Serve using UNIX domain socket 13
- `register_commands()` plugin hook to register extra CLI commands 13
- Fix compatibility with Python 3.10 13
- Support STRICT tables 13
- Refactor TableView to use asyncinject 13
- Add “updated” to metadata 12
- Metadata should be a nested arbitrary KV store 12
- Mechanism for ranking results from SQLite full-text search 12
- Sanely handle Infinity/-Infinity values in JSON using ?_json_infinity=1 12
- Package datasette for installation using homebrew 12
- Datasette Library 12
- _facet_array should work against views 12
- Full text search of all tables at once? 12
- Mechanism for turning nested JSON into foreign keys / many-to-many 12
- Port Datasette from Sanic to ASGI + Uvicorn 12
- Populate "endpoint" key in ASGI scope 12
- --cp option for datasette publish and datasette package for shipping additional files and directories 12
- base_url doesn't entirely work for running Datasette inside Binder 12
- Having view-table permission but NOT view-database should still grant access to /db/table 12
- register_output_renderer() should support streaming data 12
- Efficiently calculate list of databases/tables a user can view 12
- Support creating descending order indexes 12
- Consider using CSP to protect against future XSS 12
- Rethink approach to [ and ] in column names (currently throws error) 12
- Research: CTEs and union all to calculate facets AND query at the same time 12
- Traces should include SQL executed by subtasks created with `asyncio.gather` 12
- Ensure "pip install datasette" still works with Python 3.6 12
- Optional Pandas integration 12
- Tilde encoding: use ~ instead of - for dash-encoding 12
- Code examples in the documentation should be formatted with Black 12
- Implement ?_extra and new API design for TableView 12
- Implement command-line tool interface 11
- Option to expose expanded foreign keys in JSON/CSV 11
- Mechanism for checking if a SQLite database file is safe to open 11
- Expand plugins documentation to multiple pages 11
- Mechanism for plugins to add action menu items for various things 11
- --since feature can be confused by retweets 11
- bpylist.archiver.CircularReference: archive has a cycle with uid(13) 11
- Datasette secret mechanism - initially for signed cookies 11
- Writable canned queries live demo on Glitch 11
- base_url doesn't seem to work when adding criteria and clicking "apply" 11
- POST to /db/canned-query that returns JSON should be supported (for API clients) 11
- datasette.urls.table() / .instance() / .database() methods for constructing URLs, also exposed to templates 11
- Writable canned queries with magic parameters fail if POST body is empty 11
- Database class mechanism for cross-connection in-memory databases 11
- Race condition errors in new refresh_schemas() mechanism 11
- "Query parameters" form shows wrong input fields if query contains "03:31" style times 11
- render_cell() hook should support returning an awaitable 11
- sqlite-utils index-foreign-keys fails due to pre-existing index 11
- `sqlite-utils insert --convert` option 11
- Research how much of a difference analyze / sqlite_stat1 makes 11
- Table+query JSON and CSV links broken when using `base_url` setting 11
- Options for how `r.parsedate()` should handle invalid dates 11
- Research: how much overhead does the n=1 time limit have? 11
- Document how to use a `--convert` function that runs initialization code first 11
- Writable canned queries fail with useless non-error against immutable databases 11
- Set up some example datasets on a Cloudflare-backed domain 10
- Filter UI on table page 10
- Support for units 10
- datasette publish lambda plugin 10
- Build Dockerfile with recent Sqlite + Spatialite 10
- Table view should support filtering via many-to-many relationships 10
- Default to opening files in mutable mode, special option for immutable files 10
- New design for facet abstraction, including querystring and metadata.json 10
- Syntactic sugar for creating m2m records 10
- Option to display binary data 10
- extracts= should support multiple-column extracts 10
- Documented internals API for use in plugins 10
- Mechanism for writing to database via a queue 10
- See if I can get Datasette working on Zeit Now v2 10
- Ability to serve thumbnailed Apple Photo from its place on disk 10
- Release Datasette 0.44 10
- Plugin hook for instance/database/table metadata 10
- Refactor default views to use register_routes 10
- CLI utility for inserting binary files into SQLite 10
- FTS table with 7 rows has _fts_docsize table with 9,141 rows 10
- Switch to .blob render extension for BLOB downloads 10
- Navigation menu plus plugin hook 10
- Use YAML examples in documentation by default, not JSON 10
- Adopt Prettier for JavaScript code formatting 10
- Ability for plugins to collaborate when adding extra HTML to blocks in default templates 10
- --no-headers option for CSV and TSV 10
- Add support for Jinja2 version 3.0 10
- Test Datasette Docker images built for different architectures 10
- Research: syntactic sugar for using --get with SQL queries, maybe "datasette query" 10
- Add reference page to documentation using Sphinx autodoc 10
- [Enhancement] Please allow 'insert-files' to insert content as text. 10
- Docker configuration for exercising Datasette behind Apache mod_proxy 10
- Python library methods for calling ANALYZE 10
- Documentation should clarify /stable/ vs /latest/ 10
- Remove Hashed URL mode 10
- Config file with support for defining canned queries 9
- Datasette serve should accept paths/URLs to CSVs and other file formats 9
- Add ?_extra= mechanism for requesting extra properties in JSON 9
- Figure out some interesting example SQL queries 9
- bump uvicorn to 0.9.0 to be Python-3.8 friendly 9
- Refactor TableView.data() method 9
- Set up a live demo Datasette instance 9
- Move hashed URL mode out to a plugin 9
- ?_searchmode=raw option for running FTS searches without escaping characters 9
- Option to automatically configure based on directory layout 9
- Replace "datasette publish --extra-options" with "--setting" 9
- New WIP writable canned queries 9
- Example permissions plugin 9
- Research feasibility of 100% test coverage 9
- Rename master branch to main 9
- canned_queries() plugin hook 9
- Consider dropping explicit CSRF protection entirely? 9
- Add insert --truncate option 9
- Improve performance of extract operations 9
- Figure out how to run an environment that exercises the base_url proxy setting 9
- sqlite-utils search command 9
- GENERATED column support 9
- Datasette on Amazon Linux on ARM returns 404 for static assets 9
- "Stream all rows" is not at all obvious 9
- Better internal database_name for _internal database 9
- Mechanism for minifying JavaScript that ships with Datasette 9
- Mechanism for executing JavaScript unit tests 9
- Use _counts to speed up counts 9
- Use force_https_urls on when deploying with Cloud Run 9
- Ability to increase size of the SQL editor window 9
- Custom pages don't work with base_url setting 9
- CSV ?_stream=on redundantly calculates facets for every page 9
- "invalid reference format" publishing Docker image 9
- `default_allow_sql` setting (a re-imagining of the old `allow_sql` setting) 9
- Show count of facet values if ?_facet_size=max 9
- Manage /robots.txt in Datasette core, block robots by default 9
- Test against pysqlite3 running SQLite 3.37 9
- Allow to set `facets_array` in metadata (like current `facets`) 9
- Add SpatiaLite helpers to CLI 9
- Get Datasette compatible with Pyodide 9
- Make URLs immutable 8
- datasette publish heroku 8
- Ability to bundle and serve additional static files 8
- Add GraphQL endpoint 8
- prepare_context() plugin hook 8
- Wildcard support in query parameters 8
- URL hashing now optional: turn on with --config hash_urls:1 (#418) 8
- "datasette publish cloudrun" command to publish to Google Cloud Run 8
- Add register_output_renderer hook 8
- Improvements to table label detection 8
- sqlite-utils create-table command 8
- Stream all results for arbitrary SQL and canned queries 8
- Add a universal navigation bar which can be modified by plugins 8
- Command to fetch stargazers for one or more repos 8
- allow leading comments in SQL input field 8
- Helper methods for working with SpatiaLite 8
- datasette publish cloudrun --memory option 8
- Commits in GitHub API can have null author 8
- extra_template_vars() sending wrong view_name for index 8
- Import photo metadata from Apple Photos into SQLite 8
- Visually distinguish integer and text columns 8
- sqlite3.OperationalError: too many SQL variables in insert_all when using rows with varying numbers of columns 8
- Allow-list pragma_table_info(tablename) and similar 8
- Rename project to dogsheep-photos 8
- Consolidate request.raw_args and request.args 8
- Group permission checks by request on /-/permissions debug page 8
- Upgrade CodeMirror 8
- Mechanism for defining custom display of results 8
- .delete_where() does not auto-commit (unlike .insert() or .upsert()) 8
- the JSON object must be str, bytes or bytearray, not 'Undefined' 8
- Wide tables should scroll horizontally within the page 8
- OPTIONS requests return a 500 error 8
- Bring date parsing into Datasette core 8
- Establish pattern for release branches to support bug fixes 8
- GitHub Actions workflow to build and sign macOS binary executables 8
- Make original path available to render hooks 8
- --sniff option for sniffing delimiters 8
- --crossdb option for joining across databases 8
- sqlite-utils memory command for directly querying CSV/JSON data 8
- absolute_url() behind a proxy assembles incorrect http://127.0.0.1:8001/ URLs 8
- Tests failing with FileNotFoundError in runner.isolated_filesystem 8
- Rename Datasette.__init__(config=) parameter to settings= 8
- Allow passing a file of code to "sqlite-utils convert" 8
- Documented JavaScript variables on different templates made available for plugins 8
- Support for generated columns 8
- Get rid of the no-longer necessary ?_format=json hack for tables called x.json 8
- Refactor and simplify Datasette routing and views 8
- Filters fail to work correctly against calculated numeric columns returned by SQL views because type affinity rules do not apply 8
- "Error: near "(": syntax error" when using sqlite-utils indexes CLI 8
- ?_group_count=country - return counts by specific column(s) 7
- Ship a Docker image of the whole thing 7
- add "format sql" button to query page, uses sql-formatter 7
- Windows installation error 7
- Keyset pagination doesn't work correctly for compound primary keys 7
- inspect should record column types 7
- Travis should push tagged images to Docker Hub for each release 7
- Improve and document foreign_keys=... argument to insert/create/etc 7
- ?_where=sql-fragment parameter for table views 7
- Define mechanism for plugins to return structured data 7
- Utility mechanism for plugins to render templates 7
- Syntax for ?_through= that works as a form field 7
- Problem with square bracket in CSV column name 7
- Update SQLite bundled with Docker container 7
- index.html is not reliably loaded from a plugin 7
- .columns_dict doesn't work for all possible column types 7
- Only set .last_rowid and .last_pk for single update/inserts, not for .insert_all()/.upsert_all() with multiple records 7
- Expose scores from ZCOMPUTEDASSETATTRIBUTES 7
- publish heroku does not work on Windows 10 7
- Demo is failing to deploy 7
- Support reverse pagination (previous page, has-previous-items) 7
- Docker container is no longer being pushed (it's stuck on 0.45) 7
- insert_all(..., alter=True) should work for new columns introduced after the first 100 records 7
- Push to Docker Hub failed - but it shouldn't run for alpha releases anyway 7
- Simplify imports of common classes 7
- SQLITE_MAX_VARS maybe hard-coded too low 7
- Commands for making authenticated API calls 7
- Pagination 7
- Support the dbstat table 7
- Much, much faster extract() implementation 7
- Documented HTML hooks for JavaScript plugin authors 7
- Redesign application homepage 7
- "Edit SQL" button on canned queries 7
- Fix last remaining links to "/" that do not respect base_url 7
- .extract() shouldn't extract null values 7
- export.xml file name varies with different language settings 7
- "View all" option for facets, to provide a (paginated) list of ALL of the facet counts plus a link to view them 7
- table.pks_and_rows_where() method returning primary keys along with the rows 7
- Invalid SQL: "no such table: pragma_database_list" on database page 7
- Latest Datasette tags missing from Docker Hub 7
- "More" link for facets that shows _facet_size=max results 7
- ?_nocol= does not interact well with default facets 7
- sqlite-utils memory should handle TSV and JSON in addition to CSV 7
- Introspection property for telling if a table is a rowid table 7
- Query page .csv and .json links are not correctly URL-encoded on Vercel under unknown specific conditions 7
- New pattern for async view classes 7
- Extra options to `lookup()` which get passed to `insert()` 7
- Columns starting with an underscore behave poorly in filters 7
- Test failure in test_rebuild_fts 7
- `.execute_write(... block=True)` should be the default behaviour 7
- Maybe let plugins define custom serve options? 7
- Add SpatiaLite helpers to CLI 7
- Use dash encoding for table names and row primary keys in URLs 7
- I forgot to include the changelog in the 3.25.1 release 7
- Remove hashed URL mode 7
- Extract out `check_permissions()` from `BaseView 7
- `--nolock` feature for opening locked databases 7
- Addressable pages for every row in a table 6
- Default HTML/CSS needs to look reasonable and be responsive 6
- Support Django-style filters in querystring arguments 6
- Detect foreign keys and use them to link HTML pages together 6
- [WIP] Add publish to heroku support 6
- Nasty bug: last column not being correctly displayed 6
- Figure out how to bundle a more up-to-date SQLite 6
- Don't duplicate simple primary keys in the link column 6
- Load plugins from a `--plugins-dir=plugins/` directory 6
- Ability for plugins to define extra JavaScript and CSS 6
- inspect() should detect many-to-many relationships 6
- Deploy demo of Datasette on every commit that passes tests 6
- Plugin hook for loading metadata.json 6
- Faceted browse against a JSON list of tags 6
- CSV export in "Advanced export" pane doesn't respect query 6
- Additional Column Constraints? 6
- Rename metadata.json to config.json 6
- Easier way of creating custom row templates 6
- Experiment with type hints 6
- Command for running a search and saving tweets for that search 6
- Handle really wide tables better 6
- Ways to improve fuzzy search speed on larger data sets? 6
- Improve UI of "datasette publish cloudrun" to reduce chances of accidentally over-writing a service 6
- Mechanism for indicating foreign key relationships in the table and query page URLs 6
- updating metadata.json without recreating the app 6
- Provide a cookiecutter template for creating new plugins 6
- upsert_all() throws issue when upserting to empty table 6
- "Templates considered" comment broken in >=0.35 6
- Documentation for the "request" object 6
- Support YAML in metadata - metadata.yaml 6
- Command for retrieving dependents for a repo 6
- Question: Access to immutable database-path 6
- Support decimal.Decimal type 6
- allow_by_query setting for configuring permissions with a SQL statement 6
- python tests/fixtures.py command has a bug 6
- Mechanism for specifying allow_sql permission in metadata.json 6
- Way to enable a default=False permission for anonymous users 6
- Ability to set ds_actor cookie such that it expires 6
- startup() plugin hook 6
- "Too many open files" error running tests 6
- datasette.add_message() doesn't work inside plugins 6
- Datasette sdist is missing templates (hence broken when installing from Homebrew) 6
- End-user documentation 6
- extra_ plugin hooks should take the same arguments 6
- Mechanism for differentiating between "by me" and "liked by me" 6
- Progress bar for sqlite-utils insert 6
- Rendering glitch with column headings on mobile 6
- Change "--config foo:bar" to "--setting foo bar" 6
- Add Link: pagination HTTP headers 6
- Figure out how to display images from <en-media> tags inline in Datasette 6
- Method for datasette.client() to forward on authentication 6
- Fallback to databases in inspect-data.json when no -i options are passed 6
- Better display of binary data on arbitrary query results page 6
- Table actions menu on view pages, not on query pages 6
- load_template() plugin hook 6
- PrefixedUrlString mechanism broke everything 6
- Support order by relevance against FTS4 6
- changes to allow for compound foreign keys 6
- Support for generated columns 6
- sqlite-utils analyze-tables command and table.analyze_column() method 6
- More flexible CORS support in core, to encourage good security practices 6
- Improve the display of facets information 6
- Update Docker Spatialite version to 5.0.1 + add support for Spatialite topology functions 6
- `sqlite-utils indexes` command 6
- Error: Use either --since or --since_id, not both 6
- `db.query()` method (renamed `db.execute_returning_dicts()`) 6
- "searchmode": "raw" in table metadata 6
- `table.search(..., quote=True)` parameter and `sqlite-utils search --quote` option 6
- sqlite-utils insert errors should show SQL and parameters, if possible 6
- Mechanism to cause specific branches to deploy their own demos 6
- clean checkout & clean environment has test failures 6
- Win32 "used by another process" error with datasette publish 6
- ReadTheDocs build failed for 0.59.2 release 6
- Command for creating an empty database 6
- Idea: hover to reveal details of linked row 6
- Writable canned queries fail to load custom templates 6
- filters_from_request plugin hook, now used in TableView 6
- Release Datasette 0.60 6
- Drop support for Python 3.6 6
- Support mutating row in `--convert` without returning it 6
- Scripted exports 6
- Reconsider policy on blocking queries containing the string "pragma" 6
- datasette one.db one.db opens database twice, as one and one_2 6
- `deterministic=True` fails on versions of SQLite prior to 3.8.3 6
- Ship Datasette 0.61 6
- Proposal: datasette query 6
- .db downloads should be served with an ETag 6
- Experiment with patterns for concurrent long running queries 5
- Create neat example database 5
- Redesign JSON output, ditch jsono, offer variants controlled by parameter instead 5
- Option to open readonly but not immutable 5
- datasette publish can fail if /tmp is on a different device 5
- Refactor views 5
- Add links to example Datasette instances to appropiate places in docs 5
- Ability to enable/disable specific features via --config 5
- Custom URL routing with independent tests 5
- datasette inspect takes a very long time on large dbs 5
- Get Datasette working with Zeit Now v2's 100MB image size limit 5
- Hashed URLs should be optional 5
- Plugin for allowing CORS from specified hosts 5
- Design changes to homepage to support mutable files 5
- Option to facet by date using month or year 5
- extra_template_vars plugin hook 5
- Ability to list views, and to access db["view_name"].rows / rows_where / etc 5
- Rethink progress bars for various commands 5
- [enhancement] Method to delete a row in python 5
- Testing utilities should be available to plugins 5
- If you have databases called foo.db and foo-bar.db you cannot visit /foo-bar 5
- Don't auto-format SQL on page load 5
- stargazers command, refs #4 5
- Add this view for seeing new releases 5
- Escape_fts5_query-hookimplementation does not work with queries to standard tables 5
- on_create mechanism for after table creation 5
- Datasette.render_template() method 5
- Rethink how sanity checks work 5
- Release automation: automate the bit that posts the GitHub release 5
- table.disable_fts() method and "sqlite-utils disable-fts ..." command 5
- twitter-to-sqlite user-timeline [screen_names] --sql / --attach 5
- Option in metadata.json to set default sort order for a table 5
- Feature: record history of follower counts 5
- Custom CSS class on body for styling canned queries 5
- Repos have a big blob of JSON in the organization column 5
- Annotate photos using the Google Cloud Vision API 5
- Create a public demo 5
- Unit test that checks that all plugin hooks have corresponding unit tests 5
- Ability to sign in to Datasette as a root account 5
- CSRF protection 5
- Consider using enable_callback_tracebacks(True) 5
- Fix the demo - it breaks because of the tags table change 5
- Feature: pull request reviews and comments 5
- Mechanism for passing additional options to `datasette my.db` that affect plugins 5
- sqlite-utils insert: options for column types 5
- Features for enabling and disabling WAL mode 5
- Add homebrew installation to documentation 5
- 'datasette --get' option, refs #926 5
- Path parameters for custom pages 5
- Handle case where subsequent records (after first batch) include extra columns 5
- Better handling of encodings other than utf-8 for "sqlite-utils insert" 5
- For 1.0 update trove classifier in setup.py 5
- How should datasette.client interact with base_url 5
- Add documentation on serving Datasette behind a proxy using base_url 5
- Add search highlighting snippets 5
- datasette.urls.static_plugins(...) method 5
- Default menu links should check a real permission 5
- Rethink how table.search() method works 5
- Foreign key links break for compound foreign keys 5
- Rename datasette.config() method to datasette.setting() 5
- Show pysqlite3 version on /-/versions 5
- Feature Request: Gmail 5
- Release notes for Datasette 0.54 5
- 500 error caused by faceting if a column called `n` exists 5
- Share button for copying current URL 5
- Research using CTEs for faster facet counts 5
- Better default display of arrays of items 5
- Upgrade to Python 3.9.4 5
- Add Docker multi-arch support with Buildx 5
- ?_facet_size=X to increase number of facets results on the page 5
- `table.xindexes` using `PRAGMA index_xinfo(table)` 5
- DRAFT: A new plugin hook for dynamic metadata 5
- feature: support "events" 5
- Serve all db files in a folder 5
- .transform(types=) turns rowid into a concrete column 5
- Stop using generated columns in fixtures.db 5
- Option for importing CSV data using the SQLite .import mechanism 5
- `datasette publish cloudrun --cpu X` option 5
- Ability to search for text across all columns in a table 5
- Ability to insert file contents as text, in addition to blob 5
- Upgrade to httpx 0.20.0 (request() got an unexpected keyword argument 'allow_redirects') 5
- Allow routes to have extra options 5
- Way to test SQLite 3.37 (and potentially other versions) in CI 5
- Redesign CSV export to improve usability 5
- introduce new option for datasette package to use a slim base image 5
- Add KNN and data_licenses to hidden tables list 5
- Move canned queries closer to the SQL input area 5
- Improvements to help make Datasette a better tool for learning SQL 5
- Test failures with SQLite 3.37.0+ due to column affinity case 5
- Implement redirects from old % encoding to new dash encoding 5
- Adopt a code of conduct 5
- Display autodoc type information more legibly 5
- Research running SQL in table view in parallel using `asyncio.gather()` 5
- Protect against malicious SQL that causes damage even though our DB is immutable 4
- Homepage UI for editing metadata file 4
- Switch to ujson 4
- Pick a name 4
- datasette publish hyper 4
- Support for title/source/license metadata 4
- Enforce pagination (or at least limits) for arbitrary custom SQL 4
- Add NHS England Hospitals example to wiki 4
- Consider data-package as a format for metadata 4
- add support for ?field__isnull=1 4
- Plugin that adds an authentication layer of some sort 4
- ?_json=foo&_json=bar query string argument 4
- A primary key column that has foreign key restriction associated won't rendering label column 4
- Support WITH query 4
- 500 from missing table name 4
- Ability to bundle metadata and templates inside the SQLite file 4
- Ability to apply sort on mobile in portrait mode 4
- metadata.json support for plugin configuration options 4
- Explore "distinct values for column" in inspect() 4
- Escaping named parameters in canned queries 4
- Mechanism for automatically picking up changes when on-disk .db file changes 4
- Add version number support with Versioneer 4
- Support table names ending with .json or .csv 4
- Explore if SquashFS can be used to shrink size of packaged Docker containers 4
- Limit text display in cells containing large amounts of text 4
- Datasette on Zeit Now returns http URLs for facet and next links 4
- Expose SANIC_RESPONSE_TIMEOUT config option in a sensible way 4
- Requesting support for query description 4
- render_cell(value) plugin hook 4
- Ability to display facet counts for many-to-many relationships 4
- add_column() should support REFERENCES {other_table}({other_column}) 4
- Figure out what to do about table counts in a mutable world 4
- Refactor facets to a class and new plugin, refs #427 4
- Tracing support for seeing what SQL queries were executed 4
- Paginate + search for databases/tables on the homepage 4
- Replace most of `.inspect()` (and `datasette inspect`) with table counting 4
- Decide what to do about /-/inspect 4
- Allow .insert(..., foreign_keys=()) to auto-detect table and primary key 4
- Facets not correctly persisted in hidden form fields 4
- Every datasette plugin on the ecosystem page should have a screenshot 4
- Support opening multiple databases with the same stem 4
- Enforce import sort order with isort 4
- Decide what goes into Datasette 1.0 4
- Fix static mounts using relative paths and prevent traversal exploits 4
- Get tests running on Windows using Travis CI 4
- Support unicode in url 4
- Too many SQL variables 4
- More advanced connection pooling 4
- Option to fetch only checkins more recent than the current max checkin 4
- Add triggers while enabling FTS 4
- --sql and --attach options for feeding commands from SQL queries 4
- Use better pagination (and implement progress bar) 4
- Command to import home-timeline 4
- retweets-of-me command 4
- `import` command fails on empty files 4
- Failed to import workout points 4
- Datasette should work with Python 3.8 (and drop compatibility with Python 3.5) 4
- Mechanism for register_output_renderer to suggest extension or not 4
- Assets table with downloads 4
- Exception running first command: IndexError: list index out of range 4
- Allow creation of virtual tables at startup 4
- order_by mechanism 4
- Remove .detect_column_types() from table, make it a documented API 4
- Cashe-header missing in http-response 4
- Add documentation on Database introspection methods to internals.rst 4
- Adding a "recreate" flag to the `Database` constructor 4
- Custom pages mechanism, refs #648 4
- escape_fts() does not correctly escape * wildcards 4
- Fall back to authentication via ENV 4
- Directory configuration mode should support metadata.yaml 4
- Cloud Run fails to serve database files larger than 32MB 4
- [Feature Request] Support Repo Name in Search 🥺 4
- Ability to set custom default _size on a per-table basis 4
- Try out ExifReader 4
- add_foreign_key(...., ignore=True) 4
- register_output_renderer can_render mechanism 4
- Error pages not correctly loading CSS 4
- Publish secrets 4
- Example authentication plugin 4
- /-/metadata and so on should respect view-instance permission 4
- Log out mechanism for clearing ds_actor cookie 4
- Take advantage of .coverage being a SQLite database 4
- Skip counting hidden tables 4
- Use white-space: pre-wrap on ALL table cell contents 4
- github-to-sqlite tags command for fetching tags 4
- Output binary columns in "sqlite-utils query" JSON 4
- Security issue: read-only canned queries leak CSRF token in URL 4
- Test failures caused by failed attempts to mock pip 4
- --load-extension option for sqlite-utils query 4
- Private/secret databases: database files that are only visible to plugins 4
- request an "-o" option on "datasette server" to open the default browser at the running url 4
- Idea: conversions= could take Python functions 4
- sqlite-utils transform sub-command 4
- sqlite-utils transform/insert --detect-types 4
- from_json jinja2 filter 4
- column name links broken in 0.50.1 4
- extra_js_urls and extra_css_urls should respect base_url setting 4
- Include LICENSE in sdist 4
- Add template block prior to extra URL loaders 4
- .blob output renderer 4
- Table/database action menu cut off if too short 4
- Rebrand and redirect config.rst as settings.rst 4
- --load-extension=spatialite not working with datasetteproject/datasette docker image 4
- Fix footer not sticking to bottom in short pages 4
- "_searchmode=raw" throws an index out of range error when combined with "_search_COLUMN" 4
- sqlite-utils should suggest --csv if JSON parsing fails 4
- sqlite-utils analyze-tables command 4
- Searching for "github-to-sqlite" throws an error 4
- UNIQUE constraint failed: workouts.id 4
- Modernize code to Python 3.6+ 4
- Prettier package not actually being cached 4
- reset_counts() method and command 4
- Archive import appears to be broken on recent exports 4
- Certain database names results in 404: "Database not found: None" 4
- view_name = "query" for the query page 4
- Tests are very slow. 4
- photo-to-sqlite: command not found 4
- Installing datasette via docker: Path 'fixtures.db' does not exist 4
- Error reading csv files with large column data 4
- --port option should validate port is between 0 and 65535 4
- Allow canned query params to specify default values 4
- Escaping FTS search strings 4
- Refresh SpatiaLite documentation 4
- Feature or Documentation Request: Individual table as home page template 4
- Dockerfile: use Ubuntu 20.10 as base 4
- improve table horizontal scroll experience 4
- Document how to send multiple values for "Named parameters" 4
- Avoid error sorting by relationships if related tables are not allowed 4
- Can't use apt-get in Dockerfile when using datasetteproj/datasette as base 4
- Figure out how to publish alpha/beta releases to Docker Hub 4
- Intermittent CI failure: restore_working_directory FileNotFoundError 4
- row.update() or row.pk 4
- db.schema property and sqlite-utils schema command 4
- Cannot set type JSON 4
- Automatic type detection for CSV data 4
- Big performance boost on faceting: skip the inner order by 4
- Command for fetching Hacker News threads from the search API 4
- Add Gmail takeout mbox import (v2) 4
- Ability to default to hiding the SQL for a canned query 4
- Document exceptions that can be raised by db.execute() and friends 4
- Add reference documentation generated from docstrings 4
- xml.etree.ElementTree.ParseError: not well-formed (invalid token) 4
- sqlite-utils memory can't deal with multiple files with the same name 4
- ?_sort=rowid with _next= returns error 4
- Exceeding Cloud Run memory limits when deploying a 4.8G database 4
- `table.lookup()` option to populate additional columns when creating a record 4
- Improve Apache proxy documentation, link to demo 4
- Provide function to generate hash_id from specified columns 4
- Use datasette-table Web Component to guide the design of the JSON API for 1.0 4
- Add `Link: rel="alternate"` header pointing to JSON for a table/query 4
- Maybe return JSON from HTML pages if `Accept: application/json` is sent 4
- `sqlite-utils insert --extract colname` 4
- Allow users to pass a full convert() function definition 4
- Update janus requirement from <0.8,>=0.6.2 to >=0.6.2,<1.1 4
- Confirm if documented nginx proxy config works for row pages with escaped characters in their primary key 4
- Better error message if `--convert` code fails to return a dict 4
- `--fmt` should imply `-t` 4
- Add documentation page with the output of `--help` 4
- Release notes for 0.60 4
- Link to stable docs from older versions 4
- `sqlite-utils bulk --batch-size` option 4
- Document how to add a primary key to a rowid table using `sqlite-utils transform --pk` 4
- Creating tables with custom datatypes 4
- Update Dockerfile generated by `datasette publish` 4
- Sensible `cache-control` headers for static assets, including those served by plugins 4
- `sqlite3.NotSupportedError`: deterministic=True requires SQLite 3.8.3 or higher 4
- Datasette feature for publishing snapshots of query results 4
- Automated test for Pyodide compatibility 4
- ?_trace=1 fails with datasette-geojson for some reason 4
- Implement sensible query pagination 3
- Command line tool for uploading one or more DBs to Now 3
- Ability to plot a simple graph 3
- date, year, month and day querystring lookups 3
- Implement a better database index page 3
- Add more detailed API documentation to the README 3
- UI for editing named parameters 3
- Link to JSON for the list of tables 3
- UI support for running FTS searches 3
- If view is filtered, search should apply within those filtered rows 3
- ?_search=x should work if used directly against a FTS virtual table 3
- Show extra instructions with the interrupted 3
- apsw as alternative sqlite3 binding (for full text search) 3
- _group_count= feature improvements 3
- Datasette CSS should include content hash in the URL 3
- datasette skeleton command for kick-starting database and table metadata 3
- Custom template for named canned query 3
- proposal new option to disable user agents cache 3
- Cleaner mechanism for handling custom errors 3
- Run pks_for_table in inspect, executing once at build time rather than constantly 3
- Hide Spatialite system tables 3
- Support filtering with units and more 3
- Allow plugins to add new cli sub commands 3
- datasette publish --install=name-of-plugin 3
- label_column option in metadata.json 3
- External metadata.json 3
- Add new metadata key persistent_urls which removes the hash from all database urls 3
- Facets should not execute for ?shape=array|object 3
- Documentation for URL hashing, redirects and cache policy 3
- Build smallest possible Docker image with Datasette plus recent SQLite (with json1) plus Spatialite 4.4.0 3
- Support multiple filters of the same type 3
- ?_ttl= parameter to control caching 3
- Avoid plugins accidentally loading dependencies twice 3
- Per-database and per-table /-/ URL namespace 3
- Ability to configure SQLite cache_size 3
- Installation instructions, including how to use the docker image 3
- Ensure --help examples in docs are always up to date 3
- Use pysqlite3 if available 3
- Integration with JupyterLab 3
- datasette publish digitalocean plugin 3
- Update official datasetteproject/datasette Docker container to SQLite 3.26.0 3
- Ensure downloading a 100+MB SQLite database file works 3
- How to pass configuration to plugins? 3
- Use SQLITE_DBCONFIG_DEFENSIVE plus other recommendations from SQLite security docs 3
- Experiment: run Jinja in async mode 3
- .insert_all() should accept a generator and process it efficiently 3
- Problems handling column names containing spaces or - 3
- Zeit API v1 does not work for new users - need to migrate to v2 3
- Utilities for adding indexes 3
- Add query parameter to hide SQL textarea 3
- Datasette doesn't reload when database file changes 3
- Installing installs the tests package 3
- Fix the "datasette now publish ... --alias=x" option 3
- Make it so Docker build doesn't delay PyPI release 3
- Option to ignore inserts if primary key exists already 3
- Accessibility for non-techie newsies? 3
- Test against Python 3.8-dev using Travis 3
- Exporting sqlite database(s)? 3
- "about" parameter in metadata does not appear when alone 3
- asgi_wrapper plugin hook 3
- Unable to use rank when fts-table generated with csvs-to-sqlite 3
- Mechanism for secrets in plugin configuration 3
- datasette publish option for setting plugin configuration secrets 3
- Potential improvements to facet-by-date 3
- CodeMirror fails to load on database page 3
- .add_column() doesn't match indentation of initial creation 3
- extracts= option for insert/update/etc 3
- Script uses a lot of RAM 3
- "Too many SQL variables" on large inserts 3
- Datasette Edit 3
- "twitter-to-sqlite user-timeline" command for pulling tweets by a specific user 3
- Exposing Datasette via Jupyter-server-proxy 3
- Added support for multi arch builds 3
- Extract "source" into a separate lookup table 3
- Track and use the 'since' value 3
- Queries per DB table in metadata.json 3
- Handle spaces in DB names 3
- since_id support for home-timeline 3
- make uvicorn optional dependancy (because not ok on windows python yet) 3
- --since support for various commands for refresh-by-cron 3
- upgrade to uvicorn-0.9 to be Python-3.8 friendly 3
- Offer to format readonly SQL 3
- _where= parameter is not persisted in hidden form fields 3
- /-/plugins shows incorrect name for plugins 3
- Static assets no longer loading for installed plugins 3
- Add this repos_starred view 3
- Publish to Heroku is broken: "WARNING: You must pass the application as an import string to enable 'reload' or 'workers" 3
- rowid is not included in dropdown filter menus 3
- Custom queries with 0 results should say "0 results" 3
- Don't suggest column for faceting if all values are 1 3
- Command for importing events 3
- Make database level information from metadata.json available in the index.html template 3
- Feature request: enable extensions loading 3
- Add a glossary to the documentation 3
- fts5 syntax error when using punctuation 3
- Template debug mode that outputs template context 3
- Copy and paste doesn't work reliably on iPhone for SQL editor 3
- Tests are failing due to missing FTS5 3
- Test failures on openSUSE 15.1: AssertionError: Explicit other_table and other_column 3
- --port option to expose a port other than 8001 in "datasette package" 3
- Tutorial command no longer works 3
- Use inspect-file, if possible, for total row count 3
- prepare_connection() plugin hook should accept optional datasette argument 3
- Ability to customize columns used by extracts= feature 3
- Variables from extra_template_vars() not exposed in _context=1 3
- Search box CSS doesn't look great on OS X Safari 3
- Handle "User not found" error 3
- WIP implementation of writable canned queries 3
- --plugin-secret over-rides existing metadata.json plugin config 3
- Update aiofiles requirement from ~=0.4.0 to >=0.4,<0.6 3
- Pull repository contributors 3
- Mechanism for forcing column-type, over-riding auto-detection 3
- Issue and milestone should have foreign key to repo 3
- Issue comments don't appear to populate issues foreign key 3
- strange behavior using accented characters 3
- Configuration directory mode 3
- Create index on issue_comments(user) and other foreign keys 3
- Mechanism for creating views if they don't yet exist 3
- Add notlike table filter 3
- Question: Any fixed date for the release with the uft8-encoding fix? 3
- fts search on a column doesn't work anymore due to escape_fts 3
- Only install osxphotos if running on macOS 3
- Way of seeing full schema for a database 3
- Add PyPI project urls to setup.py 3
- request.url and request.scheme should obey force_https_urls config setting 3
- CSRF protection for /-/messages tool and writable canned queries 3
- Documentation for new "params" setting for canned queries 3
- Ability to customize what happens when a view permission fails 3
- Documentation is inconsistent about "id" as required field on actor 3
- Document the ds_actor signed cookie 3
- Horizontal scrollbar on changelog page on mobile 3
- Redesign register_facet_classes plugin hook 3
- Fall back to FTS4 if FTS5 is not available 3
- Consider pagination of canned queries 3
- Script to generate larger SQLite test files 3
- Support for compound (composite) foreign keys 3
- initial windows ci setup 3
- "Logged in as: XXX - logout" navigation item 3
- Canned query page should show the name of the canned query 3
- asgi_wrapper plugin hook is crashing at startup 3
- Ability to remove a foreign key 3
- Improved (and better documented) support for transactions 3
- Some links don't honor base_url 3
- Add a table of contents to the README 3
- "allow": true for anyone, "allow": false for nobody 3
- Interactive debugging tool for "allow" blocks 3
- Ability to insert files piped to insert-files stdin 3
- Support tokenize option for FTS 3
- Refactor TableView class so things like datasette-graphql can reuse the logic 3
- Travis should not build the master branch, only the main branch 3
- "datasette install" and "datasette uninstall" commands 3
- db.execute_write_fn(create_tables, block=True) hangs a thread if connection fails 3
- Pass columns to extra CSS/JS/etc plugin hooks 3
- Code for finding SpatiaLite in the usual locations 3
- --load-extension=spatialite shortcut option 3
- Try out CodeMirror SQL hints 3
- insert_all(..., alter=True) should work for new columns introduced after the first 100 records 3
- Datasette plugin to provide custom page for running faceted, ranked searches 3
- Timeline view 3
- table.optimize() should delete junk rows from *_fts_docsize 3
- Documentation for 404.html, 500.html templates 3
- Add --tar option to "datasette publish heroku" 3
- Add docs for .transform(column_order=) 3
- Better handling of multiple matching template wildcard paths 3
- Documentation covering buildpack deployment 3
- Datasette should default to running Uvicorn with workers=1 3
- Remove xfail tests when new httpx is released 3
- json / CSV links are broken in Datasette 0.50 3
- Add a "delete" icon next to filters (in addition to "remove filter") 3
- Fix issues relating to base_url 3
- datasette.urls.table(..., format="json") argument 3
- Add horizontal scrollbar to tables 3
- /db/table/-/blob/pk/column.blob download URL 3
- Some workout columns should be float, not text 3
- Allow iterables other than Lists in m2m records 3
- Refactor .csv to be an output renderer - and teach register_output_renderer to stream all rows 3
- .csv should link to .blob downloads 3
- Table actions menu plus plugin hook 3
- latest.datasette.io should include plugins from fixtures 3
- database_actions plugin hook 3
- 3.0 release with some minor breaking changes 3
- table.search() improvements plus sqlite-utils search command 3
- DigitalOcean buildpack memory errors for large sqlite db? 3
- Foreign keys with blank titles result in non-clickable links 3
- OperationalError('interrupted') can 500 on row page 3
- Custom widgets for canned query forms 3
- Support linking to compound foreign keys 3
- Accessing a database's `.json` is slow for very large SQLite files 3
- Fix --metadata doc usage 3
- github-to-sqlite workflows command 3
- "datasette inspect" outputs invalid JSON if an error is logged 3
- Make it easier to theme Datasette with CSS 3
- Update for Big Sur 3
- Remove unneeded exists=True for -a/--auth flag. 3
- Add Prettier to contributing documentation 3
- Install Prettier via package.json 3
- Use structlog for logging 3
- Retire "Ecosystem" page in favour of datasette.io/plugins and /tools 3
- Better error message for *_fts methods against views 3
- "Statement may not contain PRAGMA" error is not strictly true 3
- ?_size= argument is not persisted by hidden form fields in the table filters 3
- WIP: Plugin includes 3
- Rename /:memory: to /_memory 3
- Release 0.54 3
- Not all quoted statuses get fetched? 3
- Use Data from SQLite in other commands 3
- Use context manager instead of plain open 3
- gzip support for HTML (and JSON) responses 3
- Re-submitting filter form duplicates _x querystring arguments 3
- KeyError: 'Contents' on running upload 3
- Support SSL/TLS directly 3
- Hitting `_csv.Error: field larger than field limit (131072)` 3
- ensure immutable databses when starting in configuration directory mode with 3
- Allow facetting on custom queries 3
- db["my_table"].drop(ignore=True) parameter, plus sqlite-utils drop-table --ignore and drop-view --ignore 3
- Suggest for ArrayFacet possibly confused by blank values 3
- Minor type in IP adress 3
- Some links aren't properly URL encoded. 3
- Plugin hook that could support 'order by random()' for table view 3
- Support for HTTP Basic Authentication 3
- Try implementing SQLite timeouts using .interrupt() instead of using .set_progress_handler() 3
- Use SQLite conn.interrupt() instead of sqlite_timelimit() 3
- Handle byte order marks (BOMs) in CSV files 3
- Speed up tests with pytest-xdist 3
- Make row available to `render_cell` plugin hook 3
- Columns named "link" display in bold 3
- Improve `path_with_replaced_args()` and friends and document them 3
- Re-display user's query with an error message if an error occurs 3
- Supporting additional output formats, like GeoJSON 3
- Release Datasette 0.57 3
- Add some types, enforce with mypy 3
- bool type not supported 3
- Official Datasette Docker image should use SQLite >= 3.31.0 (for generated columns) 3
- Mechanism for plugins to exclude certain paths from CSRF checks 3
- Support db as first parameter before subcommand, or as environment variable 3
- Mypy fixes for rows_from_file() 3
- Test against Python 3.10-dev 3
- Use HN algolia endpoint to retrieve trees 3
- utils.parse_metadata() should be a documented internal function 3
- `table.convert(..., where=)` and `sqlite-utils convert ... --where=` 3
- `publish cloudrun` should deploy a more recent SQLite version 3
- `sqlite-utils insert --flatten` option to flatten nested JSON 3
- Modify base.html template to support optional sticky footer 3
- Add scientists to target groups 3
- Try blacken-docs 3
- Add Authorization header when CORS flag is set 3
- Invalid JSON output when no rows 3
- Update pyyaml requirement from ~=5.3 to >=5.3,<7.0 3
- Add functionality to read Parquet files. 3
- Datasette 1.0 JSON API (and documentation) 3
- "Links from other tables" broken for columns starting with underscore 3
- Research pattern for re-registering existing Click tools with register_commands 3
- A way of creating indexes on newly created tables 3
- Optional caching mechanism for table.lookup() 3
- Custom pages don't work on windows 3
- `keep_blank_values=True` when parsing `request.args` 3
- if csv export is truncated in non streaming mode set informative response header 3
- TableView refactor 3
- add hash id to "_memory" url if hashed url mode is turned on and crossdb is also turned on 3
- KeyError: 'created_at' for private accounts? 3
- Offer `python -m sqlite_utils` as an alternative to `sqlite-utils` 3
- `explain query plan select` is too strict about whitespace 3
- List `--fmt` options in the docs 3
- `sqlite-utils bulk` command 3
- `sqlite-utils bulk` command 3
- Add a CLI reference page to the docs, inspired by sqlite-utils 3
- Tests failing against Python 3.6 3
- Ensure template_path always uses "/" to match jinja 3
- Link: rel="alternate" to JSON for queries too 3
- Try test suite against macOS and Windows 3
- Support IF NOT EXISTS for table creation 3
- Refactor URL routing to enable testing 3
- Make route matched pattern groups more consistent 3
- Reconsider ensure_permissions() logic, can it be less confusing? 3
- insert fails on JSONL with whitespace 3
- [plugins][documentation] Is it possible to serve per-plugin static folders when writing one-off (single file) plugins? 3
- Make "<Binary: 2427344 bytes>" easier to read 3
- Refactor `RowView` and remove `RowTableShared` 3
- ?_trace=1 doesn't work on Global Power Plants demo 3
- Remove python-baseconv dependency 3
- Initial test suite 2
- Implement full URL design 2
- Endpoint that returns SQL ready to be piped into DB 2
- Ability to serialize massive JSON without blocking event loop 2
- Unit tests against application itself 2
- Solution for temporarily uploading DB so it can be built by docker 2
- Ship first version to PyPI 2
- Command that builds a local docker container 2
- _nocache=1 query string option for use with sort-by-random 2
- Deploy final versions of fivethirtyeight and parlgov datasets (with view pagination) 2
- :fire: Removes DS_Store 2
- TemplateAssertionError: no filter named 'tojson' 2
- Add --load-extension option to datasette for loading extra SQLite extensions 2
- Plot rows on a map with Leaflet and Leaflet.markercluster 2
- Filtered tables should show count of all matching rows, if fast enough 2
- Hide FTS-created tables by default on the database index page 2
- Build a visualization plugin for Vega 2
- Heatmap visualization plugin 2
- datasette publish gcloud 2
- Set up a pattern portfolio 2
- Document the querystring argument for setting a different time limit 2
- metadata.json support for per-database and per-table information 2
- I18n and L10n support 2
- More metadata options for template authors 2
- Custom Queries - escaping strings 2
- Rename table_rows and filtered_table_rows to have _count suffix 2
- Raise 404 on nonexistent table URLs 2
- Investigate syntactic sugar for plugins 2
- Unit tests for installable plugins 2
- Add limit on the size in KB of data returned from a single query 2
- Support for ?_search_colname=blah searches 2
- Support for hidden tables in metadata.json 2
- --spatialite option for datasette publish commands 2
- /-/plugins should show version of each installed plugin 2
- Validate metadata.json on startup 2
- Figure out a way to have /-/version return current git commit hash 2
- Rename --limit to --config, add --help-config 2
- "config" section in metadata.json (root, database and table level) 2
- Refactor inspect logic 2
- num_threads and cache_max_age should be --config options 2
- Database hash should include current datasette version 2
- Extract unit tests for inspect out to test_inspect.py 2
- …
user 284
- simonw 6,893
- codecov[bot] 141
- eyeseast 52
- russss 39
- psychemedia 32
- fgregg 32
- abdusco 26
- mroswell 20
- aborruso 19
- chrismp 18
- jacobian 14
- carlmjohnson 14
- RhetTbull 14
- tballison 13
- wragge 12
- brandonrobertz 12
- tsibley 11
- rixx 11
- terrycojones 10
- stonebig 10
- rayvoelker 10
- maxhawkins 9
- clausjuhl 9
- bobwhitelock 9
- 20after4 8
- dracos 8
- UtahDave 8
- tomchristie 8
- bsilverm 8
- rgieseke 7
- mhalle 7
- zeluspudding 7
- cobiadigital 7
- dependabot[bot] 7
- frafra 6
- amjith 6
- simonwiles 6
- zaneselvans 6
- khusmann 5
- khimaros 5
- jaywgraves 5
- MarkusH 5
- dazzag24 5
- SteadBytes 5
- dependabot-preview[bot] 5
- jayvdb 4
- bollwyvl 4
- jefftriplett 4
- ctb 4
- Btibert3 4
- dholth 4
- lovasoa 4
- r4vi 4
- jsfenfen 4
- glasnt 4
- jungle-boogie 4
- ColinMaudry 4
- kbaikov 4
- JBPressac 4
- nitinpaultifr 4
- Kabouik 4
- henry501 4
- benpickles 3
- frankieroberto 3
- fs111 3
- obra 3
- janimo 3
- atomotic 3
- ghing 3
- pkoppstein 3
- yozlet 3
- yschimke 3
- philroche 3
- macropin 3
- camallen 3
- wsxiaoys 3
- xrotwang 3
- robroc 3
- dufferzafar 3
- Florents-Tselai 3
- ashishdotme 3
- Segerberg 3
- blairdrummond 3
- jsancho-gpl 3
- kevindkeogh 3
- daniel-butler 3
- learning4life 3
- FabianHertwig 3
- polyrand 3
- pjamargh 3
- garethr 2
- danp 2
- davidbgk 2
- ftrain 2
- chrishas35 2
- tannewt 2
- ingenieroariel 2
- coleifer 2
- gavinband 2
- aviflax 2
- tholo 2
- cldellow 2
- frankier 2
- lchski 2
- tmaier 2
- gfrmin 2
- frosencrantz 2
- eads 2
- leafgarland 2
- glyph 2
- strada 2
- Mjboothaus 2
- eelkevdbos 2
- ligurio 2
- n8henrie 2
- soobrosa 2
- nathancahill 2
- betatim 2
- bsmithgall 2
- willingc 2
- nattaylor 2
- durkie 2
- raynae 2
- wulfmann 2
- philshem 2
- bram2000 2
- zzeleznick 2
- chris48s 2
- plpxsk 2
- henrikek 2
- swyxio 2
- nickvazz 2
- hydrosquall 2
- aaronyih1 2
- jussiarpalahti 2
- lagolucas 2
- chekos 2
- ad-si 2
- smithdc1 2
- gsajko 2
- null92 2
- rachelmarconi 2
- tunguyenatwork 2
- LVerneyPEReN 2
- anotherjesse 1
- jarib 1
- jokull 1
- dsisnero 1
- llimllib 1
- gijs 1
- blaine 1
- gravis 1
- nkirsch 1
- tomdyson 1
- mrchrisadams 1
- dkam 1
- harperreed 1
- furilo 1
- adamwolf 1
- prabhur 1
- dmd 1
- rubenv 1
- Uninen 1
- carsonyl 1
- nryberg 1
- step21 1
- stefanocudini 1
- rcoup 1
- scoates 1
- hpk42 1
- annapowellsmith 1
- aslakr 1
- thorn0 1
- yurivish 1
- jmelloy 1
- Krazybug 1
- dvhthomas 1
- phubbard 1
- sethvincent 1
- meatcar 1
- aitoehigie 1
- michaelmcandrew 1
- drewda 1
- stiles 1
- saulpw 1
- thadk 1
- robintw 1
- astrojuanlu 1
- ipmb 1
- steren 1
- aidansteele 1
- mikepqr 1
- 0x1997 1
- davidszotten 1
- kevboh 1
- eaubin 1
- yunzheng 1
- karlcow 1
- heyarne 1
- simonrjones 1
- mcint 1
- justinpinkney 1
- merwok 1
- mattkiefer 1
- virtadpt 1
- snth 1
- joshmgrant 1
- bcongdon 1
- nickdirienzo 1
- rafguns 1
- adamjonas 1
- hannseman 1
- kaihendry 1
- urbas 1
- brimstone 1
- adamchainz 1
- PabloLerma 1
- heussd 1
- RayBB 1
- limar 1
- drkane 1
- Gagravarr 1
- agguser 1
- dyllan-to-you 1
- justinallen 1
- jordaneremieff 1
- wdccdw 1
- progpow 1
- ltrgoddard 1
- costrouc 1
- jratike80 1
- ccorcos 1
- qqilihq 1
- QAInsights 1
- secretGeek 1
- fkuhn 1
- jameslittle230 1
- dskrad 1
- kwladyka 1
- Carib0u 1
- fatihky 1
- phoenixjun 1
- JesperTreetop 1
- bapowell 1
- louispotok 1
- ChristopherWilks 1
- Maltazar 1
- eumiro 1
- wuhland 1
- foscoj 1
- dvot197007 1
- kokes 1
- csusanu 1
- rprimet 1
- metab0t 1
- luxint 1
- spdkils 1
- sturzl 1
- robmarkcole 1
- jfeiwell 1
- coisnepe 1
- chmaynard 1
- asg017 1
- noklam 1
- GmGniap 1
- rdtq 1
- AnkitKundariya 1
- LucasElArruda 1
- duarteocarmo 1
- mattiaborsoi 1
- sarcasticadmin 1
- abeyerpath 1
- b0b5h4rp13 1
- Rik-de-Kort 1
- patricktrainer 1
- justmars 1
- miuku 1
- jcmkk3 1
- publicmatt 1
- thisismyfuckingusername 1
- MichaelTiemannOSC 1
- kirajano 1
- knowledgecamp12 1
- McEazy2700 1
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
1133331997 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133331997 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjUYd | simonw 9599 | 2022-05-20T20:27:31Z | 2022-05-20T20:27:31Z | OWNER | I'm going to move my custom JavaScript from |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133331564 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133331564 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjURs | simonw 9599 | 2022-05-20T20:27:12Z | 2022-05-20T20:27:12Z | OWNER | This seems to work for ```html+jinja ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133310253 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133310253 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjPEt | simonw 9599 | 2022-05-20T20:11:00Z | 2022-05-20T20:11:00Z | OWNER | Oh but |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133309452 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133309452 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjO4M | simonw 9599 | 2022-05-20T20:10:36Z | 2022-05-20T20:10:36Z | OWNER | Weird, I cannot figure out this |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133299417 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133299417 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjMbZ | simonw 9599 | 2022-05-20T20:05:34Z | 2022-05-20T20:05:34Z | OWNER | I can't get that thing that displays the version working. https://github.com/readthedocs/sphinx_rtd_theme/blob/9264091087620d421b0804c00937b00980ac3916/sphinx_rtd_theme/layout.html#L154 is where |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133288501 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133288501 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjJw1 | simonw 9599 | 2022-05-20T20:00:17Z | 2022-05-20T20:00:17Z | OWNER | Here's a TIL from when I first customized the Note that Furo doesn't use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133267290 | https://github.com/simonw/datasette/issues/1153#issuecomment-1133267290 | https://api.github.com/repos/simonw/datasette/issues/1153 | IC_kwDOBm6k_c5DjEla | simonw 9599 | 2022-05-20T19:44:05Z | 2022-05-20T19:50:58Z | OWNER | Undocumented Sphinx feature: you can add extra classes to a code example like this: ``` .. code-block:: json :class: metadata-json
``` https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-code-block doesn't mention this. Filed an issue about the lack of documentation here: - https://github.com/sphinx-doc/sphinx/issues/10461 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Use YAML examples in documentation by default, not JSON 771202454 | |
1133254599 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133254599 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjBfH | simonw 9599 | 2022-05-20T19:33:08Z | 2022-05-20T19:33:08Z | OWNER | Actually maybe I don't? I just noticed that on other pages on https://docs.datasette.io/en/stable/installation.html the only way to get back to that useful table of context / index page at https://docs.datasette.io/en/stable/index.html is by clicking the tiny house icon. Can I do better or should I have the logo do that? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133252598 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133252598 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjA_2 | simonw 9599 | 2022-05-20T19:31:30Z | 2022-05-20T19:31:30Z | OWNER | I'd also like to bring back this stable / latest / version indicator: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133250151 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133250151 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5DjAZn | simonw 9599 | 2022-05-20T19:29:37Z | 2022-05-20T19:29:37Z | OWNER | I want the Datasette logo in the sidebar to link to https://datasette.io/ Looks like I can do that by dropping in my own |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133246791 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133246791 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di_lH | simonw 9599 | 2022-05-20T19:26:49Z | 2022-05-20T19:26:49Z | OWNER | Putting this in the
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133242063 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133242063 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di-bP | simonw 9599 | 2022-05-20T19:22:49Z | 2022-05-20T19:22:49Z | OWNER | I have some custom CSS in this file: I tested and the The |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133232301 | https://github.com/simonw/datasette/issues/1748#issuecomment-1133232301 | https://api.github.com/repos/simonw/datasette/issues/1748 | IC_kwDOBm6k_c5Di8Ct | simonw 9599 | 2022-05-20T19:15:00Z | 2022-05-20T19:15:00Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add copy buttons next to code examples in the documentation 1243517592 | ||
1133229196 | https://github.com/simonw/datasette/issues/1747#issuecomment-1133229196 | https://api.github.com/repos/simonw/datasette/issues/1747 | IC_kwDOBm6k_c5Di7SM | simonw 9599 | 2022-05-20T19:12:30Z | 2022-05-20T19:12:30Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add tutorials to the getting started guide 1243512344 | ||
1133225441 | https://github.com/simonw/datasette/issues/1748#issuecomment-1133225441 | https://api.github.com/repos/simonw/datasette/issues/1748 | IC_kwDOBm6k_c5Di6Xh | simonw 9599 | 2022-05-20T19:09:13Z | 2022-05-20T19:09:13Z | OWNER | I'm going to add this Sphinx plugin: https://github.com/executablebooks/sphinx-copybutton |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add copy buttons next to code examples in the documentation 1243517592 | |
1133222848 | https://github.com/simonw/datasette/issues/1153#issuecomment-1133222848 | https://api.github.com/repos/simonw/datasette/issues/1153 | IC_kwDOBm6k_c5Di5vA | simonw 9599 | 2022-05-20T19:07:10Z | 2022-05-20T19:07:10Z | OWNER | I could use https://github.com/pradyunsg/sphinx-inline-tabs for this - recommended by https://pradyunsg.me/furo/recommendations/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Use YAML examples in documentation by default, not JSON 771202454 | |
1133217219 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133217219 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di4XD | simonw 9599 | 2022-05-20T18:58:54Z | 2022-05-20T18:58:54Z | OWNER | Need to address other customizations I've made in https://github.com/simonw/datasette/blob/0.62a0/docs/_templates/layout.html - such as Plausible analytics and some custom JavaScript. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133215684 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133215684 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di3_E | simonw 9599 | 2022-05-20T18:56:29Z | 2022-05-20T18:56:29Z | OWNER | One other problem: in dark mode the Datasette logo looks bad: This helps a bit:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133210942 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133210942 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di20- | simonw 9599 | 2022-05-20T18:49:40Z | 2022-05-20T18:49:40Z | OWNER | And for those local table of contents, do this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133210651 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133210651 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di2wb | simonw 9599 | 2022-05-20T18:49:11Z | 2022-05-20T18:49:11Z | OWNER | I found a workaround for the no-longer-nested left hand navigation: drop this into ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1133210032 | https://github.com/simonw/datasette/issues/1746#issuecomment-1133210032 | https://api.github.com/repos/simonw/datasette/issues/1746 | IC_kwDOBm6k_c5Di2mw | simonw 9599 | 2022-05-20T18:48:17Z | 2022-05-20T18:48:17Z | OWNER | A couple of changes I want to make. First, I don't really like the way Furo keeps the in-page titles in a separate menu on the right rather than expanding them on the left. I like this: Furo wants to do this instead: I also still want to include those inline tables of contents on the two pages that have them: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch documentation theme to Furo 1243498298 | |
1129332959 | https://github.com/simonw/sqlite-utils/issues/425#issuecomment-1129332959 | https://api.github.com/repos/simonw/sqlite-utils/issues/425 | IC_kwDOCGYnMM5DUEDf | McEazy2700 102771161 | 2022-05-17T21:27:02Z | 2022-05-17T21:27:02Z | NONE | Hi, I'm trying to deploy my site using elasticbeanstalk and I keep getting this same error : deterministic=True requires SQLite 3.8.3 or higher I saw your previous solution that involves editing sqlite-utils/sqlite_utils/db.py file, but I'm curious as to how that will work in production. |
{ "total_count": 5, "+1": 5, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite3.NotSupportedError`: deterministic=True requires SQLite 3.8.3 or higher 1203842656 | |
1129251699 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129251699 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTwNz | simonw 9599 | 2022-05-17T19:44:47Z | 2022-05-17T19:46:38Z | OWNER | { "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | ||
1129252603 | https://github.com/simonw/datasette/issues/1745#issuecomment-1129252603 | https://api.github.com/repos/simonw/datasette/issues/1745 | IC_kwDOBm6k_c5DTwb7 | simonw 9599 | 2022-05-17T19:45:51Z | 2022-05-17T19:45:51Z | OWNER | Now documented here: https://docs.datasette.io/en/latest/contributing.html#running-cog |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation on running cog 1239080102 | |
1129243427 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129243427 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTuMj | simonw 9599 | 2022-05-17T19:35:02Z | 2022-05-17T19:35:02Z | OWNER | One thing to note is that the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1129241873 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129241873 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTt0R | simonw 9599 | 2022-05-17T19:33:16Z | 2022-05-17T19:33:16Z | OWNER | I'm going to skip adding a test for this - the test logic would have to be pretty convoluted to exercise it properly, and it's a pretty minor and low-risk feature in the scheme of things. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1129241283 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129241283 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTtrD | simonw 9599 | 2022-05-17T19:32:35Z | 2022-05-17T19:32:35Z | OWNER | I tried writing a test like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1129187486 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129187486 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTgie | simonw 9599 | 2022-05-17T18:28:49Z | 2022-05-17T18:28:49Z | OWNER | I think I do that with |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1129185356 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129185356 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTgBM | simonw 9599 | 2022-05-17T18:26:26Z | 2022-05-17T18:26:26Z | OWNER | Not sure how to test this - I'd need to open my own lock against a database file somehow. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1129184908 | https://github.com/simonw/datasette/issues/1744#issuecomment-1129184908 | https://api.github.com/repos/simonw/datasette/issues/1744 | IC_kwDOBm6k_c5DTf6M | simonw 9599 | 2022-05-17T18:25:57Z | 2022-05-17T18:25:57Z | OWNER | I knocked out a quick prototype of this and it worked!
Here's the prototype diff: ```diff diff --git a/datasette/app.py b/datasette/app.py index b7b8437..f43700d 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -213,6 +213,7 @@ class Datasette: config_dir=None, pdb=False, crossdb=False, + nolock=False, ): assert config_dir is None or isinstance( config_dir, Path @@ -238,6 +239,7 @@ class Datasette: self.databases = collections.OrderedDict() self._refresh_schemas_lock = asyncio.Lock() self.crossdb = crossdb + self.nolock = nolock if memory or crossdb or not self.files: self.add_database(Database(self, is_memory=True), name="_memory") # memory_name is a random string so that each Datasette instance gets its own diff --git a/datasette/cli.py b/datasette/cli.py index 3c6e1b2..7e44665 100644 --- a/datasette/cli.py +++ b/datasette/cli.py @@ -452,6 +452,11 @@ def uninstall(packages, yes): is_flag=True, help="Enable cross-database joins using the /_memory database", ) +@click.option( + "--nolock", + is_flag=True, + help="Ignore locking and open locked files in read-only mode", +) @click.option( "--ssl-keyfile", help="SSL key file", @@ -486,6 +491,7 @@ def serve( open_browser, create, crossdb, + nolock, ssl_keyfile, ssl_certfile, return_instance=False, @@ -545,6 +551,7 @@ def serve( version_note=version_note, pdb=pdb, crossdb=crossdb, + nolock=nolock, )
diff --git a/datasette/database.py b/datasette/database.py index 44d3266..fa55804 100644 --- a/datasette/database.py +++ b/datasette/database.py @@ -89,6 +89,8 @@ class Database: # mode=ro or immutable=1? if self.is_mutable: qs = "?mode=ro" + if self.ds.nolock: + qs += "&nolock=1" else: qs = "?immutable=1" assert not (write and not self.is_mutable) ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`--nolock` feature for opening locked databases 1239008850 | |
1128064864 | https://github.com/simonw/datasette/issues/1742#issuecomment-1128064864 | https://api.github.com/repos/simonw/datasette/issues/1742 | IC_kwDOBm6k_c5DPOdg | eyeseast 25778 | 2022-05-16T19:42:13Z | 2022-05-16T19:42:13Z | CONTRIBUTOR | Just to add a wrinkle here, this loads fine: https://alltheplaces-datasette.fly.dev/alltheplaces/places.geojson?_trace=1 But also, this doesn't add any trace data: https://alltheplaces-datasette.fly.dev/alltheplaces/places.json?_trace=1 What am I missing? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_trace=1 fails with datasette-geojson for some reason 1237586379 | |
1128052948 | https://github.com/simonw/datasette/issues/1742#issuecomment-1128052948 | https://api.github.com/repos/simonw/datasette/issues/1742 | IC_kwDOBm6k_c5DPLjU | simonw 9599 | 2022-05-16T19:28:31Z | 2022-05-16T19:28:31Z | OWNER | The trace mechanism is a bit gnarly - it's actually done by some ASGI middleware I wrote, so I'm pretty sure the bug is in there somewhere: https://github.com/simonw/datasette/blob/280ff372ab30df244f6c54f6f3002da57334b3d7/datasette/tracer.py#L73 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_trace=1 fails with datasette-geojson for some reason 1237586379 | |
1128049716 | https://github.com/simonw/datasette/issues/1742#issuecomment-1128049716 | https://api.github.com/repos/simonw/datasette/issues/1742 | IC_kwDOBm6k_c5DPKw0 | eyeseast 25778 | 2022-05-16T19:24:44Z | 2022-05-16T19:24:44Z | CONTRIBUTOR | Where is |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_trace=1 fails with datasette-geojson for some reason 1237586379 | |
1128033018 | https://github.com/simonw/datasette/issues/1742#issuecomment-1128033018 | https://api.github.com/repos/simonw/datasette/issues/1742 | IC_kwDOBm6k_c5DPGr6 | simonw 9599 | 2022-05-16T19:06:38Z | 2022-05-16T19:06:38Z | OWNER | The same URL with |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_trace=1 fails with datasette-geojson for some reason 1237586379 | |
1126295407 | https://github.com/simonw/sqlite-utils/issues/431#issuecomment-1126295407 | https://api.github.com/repos/simonw/sqlite-utils/issues/431 | IC_kwDOCGYnMM5DIedv | rafguns 738408 | 2022-05-13T17:47:32Z | 2022-05-13T17:47:32Z | NONE | I'd be happy to write a PR for this, if you think it's worth having. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Allow making m2m relation of a table to itself 1227571375 | |
1125342229 | https://github.com/simonw/datasette/issues/741#issuecomment-1125342229 | https://api.github.com/repos/simonw/datasette/issues/741 | IC_kwDOBm6k_c5DE1wV | eyeseast 25778 | 2022-05-12T19:21:16Z | 2022-05-12T19:21:16Z | CONTRIBUTOR | Came here to check if this had been flagged already. Was helping a colleague get something on Cloud Run and had to dig to find If I get some time next week, maybe I'll try to tackle it. Would definitely make things easier to be able to do something like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Replace "datasette publish --extra-options" with "--setting" 607223136 | |
1125083348 | https://github.com/simonw/datasette/issues/1298#issuecomment-1125083348 | https://api.github.com/repos/simonw/datasette/issues/1298 | IC_kwDOBm6k_c5DD2jU | llimllib 7150 | 2022-05-12T14:43:51Z | 2022-05-12T14:43:51Z | NONE | user report: I found this issue because the first time I tried to use datasette for real, I displayed a large table, and thought there was no horizontal scroll bar at all. I didn't even consider that I had to scroll all the way to the end of the page to find it. Just chipping in to say that this confused me, and I didn't even find the scroll bar until after I saw this issue. I don't know what the right answer is, but IMO the UI should suggest to the user that there is a way to view the data that's hidden to the right. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
improve table horizontal scroll experience 855476501 | |
1117662420 | https://github.com/simonw/datasette/issues/1739#issuecomment-1117662420 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5CnizU | simonw 9599 | 2022-05-04T18:21:18Z | 2022-05-04T18:21:18Z | OWNER | That prototype is now public: https://github.com/simonw/datasette-lite |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1116684581 | https://github.com/simonw/sqlite-utils/issues/416#issuecomment-1116684581 | https://api.github.com/repos/simonw/sqlite-utils/issues/416 | IC_kwDOCGYnMM5Cj0El | mattkiefer 638427 | 2022-05-03T21:36:49Z | 2022-05-03T21:36:49Z | NONE | Thanks for addressing this @simonw! However, I just reinstalled sqlite-utils 3.26.1 and get an |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Options for how `r.parsedate()` should handle invalid dates 1173023272 | |
1116336340 | https://github.com/simonw/sqlite-utils/issues/430#issuecomment-1116336340 | https://api.github.com/repos/simonw/sqlite-utils/issues/430 | IC_kwDOCGYnMM5CifDU | rayvoelker 9308268 | 2022-05-03T17:03:31Z | 2022-05-03T17:03:31Z | NONE | So, the good news is that it appears that setting one of those PRAGMA statements fixed the issue of I wonder if it's something system / environment specific about SQLite, or maybe something else going on. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Document how to use `PRAGMA temp_store` to avoid errors when running VACUUM against huge databases 1224112817 | |
1116215371 | https://github.com/simonw/datasette/issues/1739#issuecomment-1116215371 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5CiBhL | simonw 9599 | 2022-05-03T15:12:16Z | 2022-05-03T15:12:16Z | OWNER | That worked - both DBs are 304 for me now on a subsequent load of the page: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1116183369 | https://github.com/simonw/datasette/issues/1739#issuecomment-1116183369 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5Ch5tJ | simonw 9599 | 2022-05-03T14:43:14Z | 2022-05-03T14:43:14Z | OWNER | Relevant tests start here: https://github.com/simonw/datasette/blob/d60f163528f466b1127b2935c3b6869c34fd6545/tests/test_html.py#L395 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1116180599 | https://github.com/simonw/datasette/issues/1739#issuecomment-1116180599 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5Ch5B3 | simonw 9599 | 2022-05-03T14:40:32Z | 2022-05-03T14:40:32Z | OWNER | Database downloads are served here: https://github.com/simonw/datasette/blob/d60f163528f466b1127b2935c3b6869c34fd6545/datasette/views/database.py#L186-L192 Here's I can add an |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1116178727 | https://github.com/simonw/datasette/issues/1739#issuecomment-1116178727 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5Ch4kn | simonw 9599 | 2022-05-03T14:38:46Z | 2022-05-03T14:38:46Z | OWNER | Reminded myself how this works by reviewing Simply add a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1115760104 | https://github.com/simonw/datasette/issues/1739#issuecomment-1115760104 | https://api.github.com/repos/simonw/datasette/issues/1739 | IC_kwDOBm6k_c5CgSXo | simonw 9599 | 2022-05-03T05:50:19Z | 2022-05-03T05:50:19Z | OWNER | Here's how Starlette does it: https://github.com/encode/starlette/blob/830f3486537916bae6b46948ff922adc14a22b7c/starlette/staticfiles.py#L213 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
.db downloads should be served with an ETag 1223699280 | |
1115542067 | https://github.com/simonw/datasette/issues/1732#issuecomment-1115542067 | https://api.github.com/repos/simonw/datasette/issues/1732 | IC_kwDOBm6k_c5CfdIz | tannewt 52649 | 2022-05-03T01:50:44Z | 2022-05-03T01:50:44Z | NONE | I haven’t set one up unfortunately. My time is very limited because we just had a baby. On Mon, May 2, 2022, at 6:42 PM, Simon Willison wrote:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Custom page variables aren't decoded 1221849746 | |
1115533820 | https://github.com/simonw/datasette/issues/1732#issuecomment-1115533820 | https://api.github.com/repos/simonw/datasette/issues/1732 | IC_kwDOBm6k_c5CfbH8 | simonw 9599 | 2022-05-03T01:42:25Z | 2022-05-03T01:42:25Z | OWNER | Thanks, this definitely sounds like a bug. Do you have simple steps to reproduce this? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Custom page variables aren't decoded 1221849746 | |
1115470180 | https://github.com/simonw/datasette/issues/1737#issuecomment-1115470180 | https://api.github.com/repos/simonw/datasette/issues/1737 | IC_kwDOBm6k_c5CfLlk | simonw 9599 | 2022-05-02T23:39:29Z | 2022-05-02T23:39:29Z | OWNER | Test ran in 38 seconds and passed! https://github.com/simonw/datasette/runs/6265954274?check_suite_focus=true I'm going to have it run on every commit and PR. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Automated test for Pyodide compatibility 1223459734 | |
1115468193 | https://github.com/simonw/datasette/issues/1737#issuecomment-1115468193 | https://api.github.com/repos/simonw/datasette/issues/1737 | IC_kwDOBm6k_c5CfLGh | simonw 9599 | 2022-05-02T23:35:26Z | 2022-05-02T23:35:26Z | OWNER | https://github.com/simonw/datasette/runs/6265915080?check_suite_focus=true failed but looks like it passed because I forgot to use It failed because it didn't have |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Automated test for Pyodide compatibility 1223459734 | |
1115464097 | https://github.com/simonw/datasette/issues/1737#issuecomment-1115464097 | https://api.github.com/repos/simonw/datasette/issues/1737 | IC_kwDOBm6k_c5CfKGh | simonw 9599 | 2022-05-02T23:27:40Z | 2022-05-02T23:27:40Z | OWNER | I'm going to start off by running this manually - I may run it on every commit once this is all a little bit more stable. I can base the workflow on https://github.com/simonw/scrape-hacker-news-by-domain/blob/main/.github/workflows/scrape.yml |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Automated test for Pyodide compatibility 1223459734 | |
1115462720 | https://github.com/simonw/datasette/issues/1737#issuecomment-1115462720 | https://api.github.com/repos/simonw/datasette/issues/1737 | IC_kwDOBm6k_c5CfJxA | simonw 9599 | 2022-05-02T23:25:03Z | 2022-05-02T23:25:03Z | OWNER | Here's a script that seems to work. It builds the wheel, starts a Python web server that serves the wheel, runs a test with ```bash !/bin/bashBuild the wheelpython3 -m build Find name of wheelwheel=$(basename $(ls dist/*.whl)) strip off the dist/Create a blank index pageecho ' <script src="https://cdn.jsdelivr.net/pyodide/v0.20.0/full/pyodide.js"></script>' > dist/index.html Run a server for that dist/ foldercd dist python3 -m http.server 8529 & cd .. shot-scraper javascript http://localhost:8529/ " async () => { let pyodide = await loadPyodide(); await pyodide.loadPackage(['micropip', 'ssl', 'setuptools']); let output = await pyodide.runPythonAsync(` import micropip await micropip.install('h11==0.12.0') await micropip.install('http://localhost:8529/$wheel') import ssl import setuptools from datasette.app import Datasette ds = Datasette(memory=True, settings={'num_sql_threads': 0}) (await ds.client.get('/_memory.json?sql=select+55+as+itworks&_shape=array')).text `); if (JSON.parse(output)[0].itworks != 55) { throw 'Got ' + output + ', expected itworks: 55'; } return 'Test passed!'; } " Shut down the serverpkill -f 'http.server 8529' ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Automated test for Pyodide compatibility 1223459734 | |
1115404729 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115404729 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5Ce7m5 | simonw 9599 | 2022-05-02T21:49:01Z | 2022-05-02T21:49:38Z | OWNER | That alpha release works! https://pyodide.org/en/stable/console.html ```pycon Welcome to the Pyodide terminal emulator 🐍 Python 3.10.2 (main, Apr 9 2022 20:52:01) on WebAssembly VM Type "help", "copyright", "credits" or "license" for more information.
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115318417 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115318417 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CemiR | simonw 9599 | 2022-05-02T20:13:43Z | 2022-05-02T20:13:43Z | OWNER | This is good enough to push an alpha. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115318303 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115318303 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5Cemgf | simonw 9599 | 2022-05-02T20:13:36Z | 2022-05-02T20:13:36Z | OWNER | I got a build from the ``` Welcome to the Pyodide terminal emulator 🐍 Python 3.10.2 (main, Apr 9 2022 20:52:01) on WebAssembly VM Type "help", "copyright", "credits" or "license" for more information.
That I can avoid it by running this first though:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115301733 | https://github.com/simonw/datasette/issues/1735#issuecomment-1115301733 | https://api.github.com/repos/simonw/datasette/issues/1735 | IC_kwDOBm6k_c5Ceidl | simonw 9599 | 2022-05-02T19:57:19Z | 2022-05-02T19:59:03Z | OWNER | This code breaks if that setting is 0: It's used here: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Datasette setting to disable threading (for Pyodide) 1223263540 | |
1115288284 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115288284 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CefLc | simonw 9599 | 2022-05-02T19:40:33Z | 2022-05-02T19:40:33Z | OWNER | I'll release this as a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115283922 | https://github.com/simonw/datasette/issues/1734#issuecomment-1115283922 | https://api.github.com/repos/simonw/datasette/issues/1734 | IC_kwDOBm6k_c5CeeHS | simonw 9599 | 2022-05-02T19:35:32Z | 2022-05-02T19:35:32Z | OWNER | I'll use my original from 2009: https://www.djangosnippets.org/snippets/1431/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Remove python-baseconv dependency 1223241647 | |
1115282773 | https://github.com/simonw/datasette/issues/1734#issuecomment-1115282773 | https://api.github.com/repos/simonw/datasette/issues/1734 | IC_kwDOBm6k_c5Ced1V | simonw 9599 | 2022-05-02T19:34:15Z | 2022-05-02T19:34:15Z | OWNER | I'm going to vendor it and update the documentation. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Remove python-baseconv dependency 1223241647 | |
1115278325 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115278325 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5Cecv1 | simonw 9599 | 2022-05-02T19:29:05Z | 2022-05-02T19:29:05Z | OWNER | I'm going to add a Datasette setting to disable threading entirely, designed for usage in this particular case. I thought about adding a new setting, then I noticed this:
I'm going to let users set that to |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115268245 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115268245 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CeaSV | simonw 9599 | 2022-05-02T19:18:11Z | 2022-05-02T19:18:11Z | OWNER | Maybe I can leave ```pycon Welcome to the Pyodide terminal emulator 🐍 Python 3.10.2 (main, Apr 9 2022 20:52:01) on WebAssembly VM Type "help", "copyright", "credits" or "license" for more information.
But it looks like i can address this issue just by making |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115262218 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115262218 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CeY0K | simonw 9599 | 2022-05-02T19:11:51Z | 2022-05-02T19:14:01Z | OWNER | Here's the full diff I applied to Datasette to get it fully working in Pyodide: And as a visible diff: ```diff diff --git a/datasette/app.py b/datasette/app.py index d269372..6c0c5fc 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -15,7 +15,6 @@ import pkg_resources import re import secrets import sys -import threading import traceback import urllib.parse from concurrent import futures @@ -26,7 +25,6 @@ from itsdangerous import URLSafeSerializer from jinja2 import ChoiceLoader, Environment, FileSystemLoader, PrefixLoader from jinja2.environment import Template from jinja2.exceptions import TemplateNotFound -import uvicorn from .views.base import DatasetteError, ureg from .views.database import DatabaseDownload, DatabaseView @@ -813,7 +811,6 @@ class Datasette: }, "datasette": datasette_version, "asgi": "3.0", - "uvicorn": uvicorn.version, "sqlite": { "version": sqlite_version, "fts_versions": fts_versions, @@ -854,23 +851,7 @@ class Datasette: ]
from .tracer import trace @@ -21,8 +20,6 @@ from .utils import ( ) from .inspect import inspect_hash -connections = threading.local()AttachedDatabase = namedtuple("AttachedDatabase", ("seq", "name", "file")) @@ -43,12 +40,12 @@ class Database: self.hash = None self.cached_size = None self._cached_table_counts = None - self._write_thread = None - self._write_queue = None if not self.is_mutable and not self.is_memory: p = Path(path) self.hash = inspect_hash(p) self.cached_size = p.stat().st_size + self._read_connection = None + self._write_connection = None
@@ -134,60 +131,17 @@ class Database: return results
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115260999 | https://github.com/simonw/datasette/issues/1734#issuecomment-1115260999 | https://api.github.com/repos/simonw/datasette/issues/1734 | IC_kwDOBm6k_c5CeYhH | simonw 9599 | 2022-05-02T19:10:34Z | 2022-05-02T19:10:34Z | OWNER | This is actually mostly a documentation thing: here: https://docs.datasette.io/en/0.61.1/authentication.html#including-an-expiry-time In the code it's only used in these two places: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Remove python-baseconv dependency 1223241647 | |
1115258737 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115258737 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CeX9x | simonw 9599 | 2022-05-02T19:08:17Z | 2022-05-02T19:08:17Z | OWNER | I was going to vendor I used https://cs.github.com/ and as far as I can tell there aren't any! So I'm going to remove that dependency and work out a smarter way to do this - probably by providing a utility function within Datasette itself. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115256318 | https://github.com/simonw/datasette/issues/1733#issuecomment-1115256318 | https://api.github.com/repos/simonw/datasette/issues/1733 | IC_kwDOBm6k_c5CeXX- | simonw 9599 | 2022-05-02T19:05:55Z | 2022-05-02T19:05:55Z | OWNER | I released a
Datasette never actually sets that cookie itself - it instead encourages plugins to set it in the authentication documentation here: https://docs.datasette.io/en/0.61.1/authentication.html#including-an-expiry-time |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get Datasette compatible with Pyodide 1223234932 | |
1115196863 | https://github.com/simonw/sqlite-utils/pull/429#issuecomment-1115196863 | https://api.github.com/repos/simonw/sqlite-utils/issues/429 | IC_kwDOCGYnMM5CeI2_ | simonw 9599 | 2022-05-02T18:03:47Z | 2022-05-02T18:52:42Z | OWNER | I made a build of this branch and tested it like this: https://pyodide.org/en/stable/console.html ```pycon
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Depend on click-default-group-wheel 1223177069 | |
1115197644 | https://github.com/simonw/sqlite-utils/pull/429#issuecomment-1115197644 | https://api.github.com/repos/simonw/sqlite-utils/issues/429 | IC_kwDOCGYnMM5CeJDM | simonw 9599 | 2022-05-02T18:04:28Z | 2022-05-02T18:04:28Z | OWNER | I'm going to ship this straight away as |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Depend on click-default-group-wheel 1223177069 | |
1114601882 | https://github.com/simonw/datasette/issues/1479#issuecomment-1114601882 | https://api.github.com/repos/simonw/datasette/issues/1479 | IC_kwDOBm6k_c5Cb3ma | Rik-de-Kort 32839123 | 2022-05-02T08:10:27Z | 2022-05-02T11:54:49Z | NONE | Also ran into this issue today using The next error I get is docker-specific, so that probably does resolve the Datasette error here. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Win32 "used by another process" error with datasette publish 1010112818 | |
1114058210 | https://github.com/simonw/datasette/issues/1727#issuecomment-1114058210 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CZy3i | simonw 9599 | 2022-04-30T21:39:34Z | 2022-04-30T21:39:34Z | OWNER | Something to consider if I look into subprocesses for parallel query execution: https://sqlite.org/howtocorrupt.html#carrying_an_open_database_connection_across_a_fork
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1114038259 | https://github.com/simonw/datasette/issues/1729#issuecomment-1114038259 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CZt_z | simonw 9599 | 2022-04-30T19:06:03Z | 2022-04-30T19:06:03Z | OWNER |
I think |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1114036946 | https://github.com/simonw/datasette/issues/1729#issuecomment-1114036946 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CZtrS | simonw 9599 | 2022-04-30T18:56:25Z | 2022-04-30T19:04:03Z | OWNER | Related: - #1558 Which talks about how there was confusion in this example: https://latest.datasette.io/fixtures/facetable.json?_facet=created&_facet_date=created&_facet=tags&_facet_array=tags&_nosuggest=1&_size=0 Which I fixed in #625 by introducing |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1114037521 | https://github.com/simonw/datasette/issues/1729#issuecomment-1114037521 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CZt0R | simonw 9599 | 2022-04-30T19:01:07Z | 2022-04-30T19:01:07Z | OWNER | I had to look up what That's a bit of a weird thing to expose in the API. Maybe change that to |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1114013757 | https://github.com/simonw/datasette/issues/1729#issuecomment-1114013757 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CZoA9 | simonw 9599 | 2022-04-30T16:15:51Z | 2022-04-30T18:54:39Z | OWNER | Deployed a preview of this here: https://latest-1-0-alpha.datasette.io/ Examples:
Second example produces:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112889800 | https://github.com/simonw/datasette/issues/1727#issuecomment-1112889800 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CVVnI | simonw 9599 | 2022-04-29T05:29:38Z | 2022-04-29T05:29:38Z | OWNER | OK, I just got the most incredible result with that! I started up a container running
And... the parallel one beat the non-parallel one decisively, on multiple page refreshes! Not parallel: 77ms Parallel: 47ms So yeah, I'm very confident this is a problem with the GIL. And I am absolutely stunned that @colesbury's fork ran Datasette (which has some reasonably tricky threading and async stuff going on) out of the box! |
{ "total_count": 2, "+1": 2, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1112879463 | https://github.com/simonw/datasette/issues/1727#issuecomment-1112879463 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CVTFn | simonw 9599 | 2022-04-29T05:03:58Z | 2022-04-29T05:03:58Z | OWNER | It would be really fun to try running this with the in-development There's a Docker container for it: https://hub.docker.com/r/nogil/python It suggests you can run something like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1112878955 | https://github.com/simonw/datasette/issues/1727#issuecomment-1112878955 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CVS9r | simonw 9599 | 2022-04-29T05:02:40Z | 2022-04-29T05:02:40Z | OWNER | Here's a very useful (recent) article about how the GIL works and how to think about it: https://pythonspeed.com/articles/python-gil/ - via https://lobste.rs/s/9hj80j/when_python_can_t_thread_deep_dive_into_gil From that article:
That explains what I'm seeing here. I'm pretty convinced now that the reason I'm not getting a performance boost from parallel queries is that there's more time spent in Python code assembling the results than in SQLite C code executing the query. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1112734577 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112734577 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUvtx | simonw 9599 | 2022-04-28T23:08:42Z | 2022-04-28T23:08:42Z | OWNER | That prototype is a very small amount of code so far: ```diff diff --git a/datasette/renderer.py b/datasette/renderer.py index 4508949..b600e1b 100644 --- a/datasette/renderer.py +++ b/datasette/renderer.py @@ -28,6 +28,10 @@ def convert_specific_columns_to_json(rows, columns, json_cols): def json_renderer(args, data, view_name): """Render a response as JSON""" + from pprint import pprint + + pprint(data) + status_code = 200
@@ -43,6 +47,41 @@ def json_renderer(args, data, view_name): if "rows" in data and not value_as_boolean(args.get("_json_infinity", "0")): data["rows"] = [remove_infinites(row) for row in data["rows"]]
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112732563 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112732563 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUvOT | simonw 9599 | 2022-04-28T23:05:03Z | 2022-04-28T23:05:03Z | OWNER | OK, the prototype of this is looking really good - it's very pleasant to use.
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112730416 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112730416 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUusw | simonw 9599 | 2022-04-28T23:01:21Z | 2022-04-28T23:01:21Z | OWNER | I'm not sure what to do about the It's not really relevant to table results, since they are paginated whether or not you ask for them to be. It plays a role in query results, where you might run Adding it to every table result and always setting it to I think I'm going to keep it exclusively in the default representation for the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112721321 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112721321 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUsep | simonw 9599 | 2022-04-28T22:44:05Z | 2022-04-28T22:44:14Z | OWNER | I may be able to implement this mostly in the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112717745 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112717745 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUrmx | simonw 9599 | 2022-04-28T22:38:39Z | 2022-04-28T22:39:05Z | OWNER | (I remain keen on the idea of shipping a plugin that restores the old default API shape to people who have written pre-Datasette-1.0 code against it, but I'll tackle that much later. I really like how jQuery has a culture of doing this.) |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112717210 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112717210 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUrea | simonw 9599 | 2022-04-28T22:37:37Z | 2022-04-28T22:37:37Z | OWNER | This means I'll add |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112716611 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112716611 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUrVD | simonw 9599 | 2022-04-28T22:36:24Z | 2022-04-28T22:36:24Z | OWNER | Then I'm going to implement the following
I thought about having I'm tempted to add |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112713581 | https://github.com/simonw/datasette/issues/1729#issuecomment-1112713581 | https://api.github.com/repos/simonw/datasette/issues/1729 | IC_kwDOBm6k_c5CUqlt | simonw 9599 | 2022-04-28T22:31:11Z | 2022-04-28T22:31:11Z | OWNER | I'm going to change the default API response to look like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement ?_extra and new API design for TableView 1219385669 | |
1112711115 | https://github.com/simonw/datasette/issues/1715#issuecomment-1112711115 | https://api.github.com/repos/simonw/datasette/issues/1715 | IC_kwDOBm6k_c5CUp_L | simonw 9599 | 2022-04-28T22:26:56Z | 2022-04-28T22:26:56Z | OWNER | I'm not going to use
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Refactor TableView to use asyncinject 1212823665 | |
1112668411 | https://github.com/simonw/datasette/issues/1727#issuecomment-1112668411 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CUfj7 | simonw 9599 | 2022-04-28T21:25:34Z | 2022-04-28T21:25:44Z | OWNER | The two most promising theories at the moment, from here and Twitter and the SQLite forum, are:
A couple of ways to research the in-memory theory:
I need to do some more, better benchmarks using these different approaches. https://twitter.com/laurencerowe/status/1519780174560169987 also suggests:
I like that second idea a lot - I could use the mandelbrot example from https://www.sqlite.org/lang_with.html#outlandish_recursive_query_examples |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1111955628 | https://github.com/simonw/datasette/issues/1633#issuecomment-1111955628 | https://api.github.com/repos/simonw/datasette/issues/1633 | IC_kwDOBm6k_c5CRxis | henrikek 6613091 | 2022-04-28T09:12:56Z | 2022-04-28T09:12:56Z | NONE | I have verified that the problem with base_url still exists in the latest version 0.61.1. I would need some guidance if my code change suggestion is correct or if base_url should be included in some other code? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
base_url or prefix does not work with _exact match 1129052172 | |
1111752676 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111752676 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ__k | wragge 127565 | 2022-04-28T05:11:54Z | 2022-04-28T05:11:54Z | CONTRIBUTOR | And in terms of the bug, yep I agree that option 2 would be the most useful and least frustrating. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111751734 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111751734 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ_w2 | wragge 127565 | 2022-04-28T05:09:59Z | 2022-04-28T05:09:59Z | CONTRIBUTOR | Thanks, I'll give it a try! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111726586 | https://github.com/simonw/datasette/issues/1727#issuecomment-1111726586 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CQ5n6 | simonw 9599 | 2022-04-28T04:17:16Z | 2022-04-28T04:19:31Z | OWNER | I could experiment with the Code examples: https://cs.github.com/?scopeName=All+repos&scope=&q=run_in_executor+ProcessPoolExecutor |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1111725638 | https://github.com/simonw/datasette/issues/1727#issuecomment-1111725638 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CQ5ZG | simonw 9599 | 2022-04-28T04:15:15Z | 2022-04-28T04:15:15Z | OWNER | Useful theory from Keith Medcalf https://sqlite.org/forum/forumpost/e363c69d3441172e
So maybe this is a GIL thing. I should test with some expensive SQL queries (maybe big aggregations against large tables) and see if I can spot an improvement there. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1111714665 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111714665 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ2tp | simonw 9599 | 2022-04-28T03:52:47Z | 2022-04-28T03:52:58Z | OWNER | Nice custom template/theme! Yeah, for that I'd recommend hosting elsewhere - on a regular VPS (I use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111712953 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111712953 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ2S5 | wragge 127565 | 2022-04-28T03:48:36Z | 2022-04-28T03:48:36Z | CONTRIBUTOR | I don't think that'd work for this project. The db is very big, and my aim was to have an environment where researchers could be making use of the data, but be easily able to add corrections to the HTR/OCR extracted data when they came across problems. It's in its immutable (!) form here: https://sydney-stock-exchange-xqtkxtd5za-ts.a.run.app/stock_exchange/stocks |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111708206 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111708206 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ1Iu | simonw 9599 | 2022-04-28T03:38:56Z | 2022-04-28T03:38:56Z | OWNER | In terms of this bug, there are a few potential fixes:
I'm not keen on that last one because it would be frustrating if you couldn't launch Datasette just because you had an old canned query lying around in your metadata file. So I'm leaning towards option 2. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111707384 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111707384 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ074 | simonw 9599 | 2022-04-28T03:36:46Z | 2022-04-28T03:36:56Z | OWNER | A more realistic solution (which I've been using on several of my own projects) is to keep the data itself in GitHub and encourage users to edit it there - using the GitHub web interface to edit YAML files or similar. Needs your users to be comfortable hand-editing YAML though! You can at least guard against critical errors by having CI run tests against their YAML before deploying. I have a dream of building a more friendly web forms interface which edits the YAML back on GitHub for the user, but that's just a concept at the moment. Even more fun would be if a user-friendly form could submit PRs for review without the user having to know what a PR is! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111706519 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111706519 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ0uX | simonw 9599 | 2022-04-28T03:34:49Z | 2022-04-28T03:34:49Z | OWNER | I've wanted to do stuff like that on Cloud Run too. So far I've assumed that it's not feasible, but recently I've been wondering how hard it would be to have a small (like less than 100KB or so) Datasette instance which persists data to a backing GitHub repository such that when it starts up it can pull the latest copy and any time someone edits it can push their changes. I'm still not sure it would work well on Cloud Run due to the uncertainty at what would happen if Cloud Run decided to boot up a second instance - but it's still an interesting thought exercise. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111705323 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111705323 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ0br | wragge 127565 | 2022-04-28T03:32:06Z | 2022-04-28T03:32:06Z | CONTRIBUTOR | Ah, that would be it! I have a core set of data which doesn't change to which I want authorised users to be able to submit corrections. I was going to deal with the persistence issue by just grabbing the user corrections at regular intervals and saving to GitHub. I might need to rethink. Thanks! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111705069 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111705069 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQ0Xt | simonw 9599 | 2022-04-28T03:31:33Z | 2022-04-28T03:31:33Z | OWNER | Confirmed - this is a bug where immutable databases fail to show a useful error if you write to them with a canned query. Steps to reproduce:
Now do this instead:
And I'm getting a broken error: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111699175 | https://github.com/simonw/datasette/issues/1727#issuecomment-1111699175 | https://api.github.com/repos/simonw/datasette/issues/1727 | IC_kwDOBm6k_c5CQy7n | simonw 9599 | 2022-04-28T03:19:48Z | 2022-04-28T03:20:08Z | OWNER | I ran The area on the right is the threads running the DB queries: Interactive version here: https://static.simonwillison.net/static/2022/datasette-parallel-profile.svg |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: demonstrate if parallel SQL queries are worthwhile 1217759117 | |
1111698307 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111698307 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQyuD | simonw 9599 | 2022-04-28T03:18:02Z | 2022-04-28T03:18:02Z | OWNER | If the behaviour you are seeing is because the database is running in immutable mode then that's a bug - you should get a useful error message instead! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 | |
1111697985 | https://github.com/simonw/datasette/issues/1728#issuecomment-1111697985 | https://api.github.com/repos/simonw/datasette/issues/1728 | IC_kwDOBm6k_c5CQypB | simonw 9599 | 2022-04-28T03:17:20Z | 2022-04-28T03:17:20Z | OWNER | How did you deploy to Cloud Run?
That's why I upgraded |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Writable canned queries fail with useless non-error against immutable databases 1218133366 |
Advanced export
JSON shape: default, array, newline-delimited, object
CREATE TABLE [issue_comments] ( [html_url] TEXT, [issue_url] TEXT, [id] INTEGER PRIMARY KEY, [node_id] TEXT, [user] INTEGER REFERENCES [users]([id]), [created_at] TEXT, [updated_at] TEXT, [author_association] TEXT, [body] TEXT, [reactions] TEXT, [issue] INTEGER REFERENCES [issues]([id]) , [performed_via_github_app] TEXT); CREATE INDEX [idx_issue_comments_issue] ON [issue_comments] ([issue]); CREATE INDEX [idx_issue_comments_user] ON [issue_comments] ([user]);
updated_at (date) >1000 ✖