sha,message,author_date,committer_date,raw_author,raw_committer,repo,author,committer 80ada4dbb3b7a19e6a0480570f38758d17b87f8b,"Added 'datasette --version' support Using http://click.pocoo.org/5/api/#click.version_option",2017-11-19T05:59:16Z,2017-11-19T05:59:16Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 f59c840e7db8870afcdeba7a53bdea07bb674334,Show row count for custom SQL queries,2017-11-19T15:54:50Z,2017-11-19T15:54:50Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 eed6a0fe36120948f8bbc0596185300eadc3d2f4,"Implemented ?_search=XXX + UI if a FTS table is detected Closes #131",2017-11-19T16:59:26Z,2017-11-19T16:59:26Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 ddc808f387be62cf776b815bb0eda77616c412ae,"Added --build=master option to datasette publish and package The `datasette publish` and `datasette package` commands both now accept an optional `--build` argument. If provided, this can be used to specify a branch published to GitHub that should be built into the container. This makes it easier to test code that has not yet been officially released to PyPI, e.g.: datasette publish now mydb.db --branch=master",2017-11-19T18:20:17Z,2017-11-19T18:20:17Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 386fb11d42767039bb2b389ce98996673d780a42,"?_filter_column=col&_filter_op=op&_filter_value=value redirect Part of implementing the filters UI (refs #86) - the following: /trees/Trees?_filter_column=SiteOrder&_filter_op=gt&_filter_value=2 Now redirects to this; /trees/Trees?SiteOrder__gt=2",2017-11-19T20:25:29Z,2017-11-19T20:25:29Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 a5881e105a02830d26f07e98177248d5910893da,"?_filter_column=col&_filter_op=isnull__1 redirect if filter_op contains a __ the value is set to the right hand side. e.g. ?_filter_column=col&_filter_op=isnull__1&_filter_value=x Redirects to: ?col__isnull=1 Refs #86",2017-11-19T20:33:30Z,2017-11-19T20:33:30Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 523c6f9e3a2cb9a9b5627ee2951147110e91d499,Fixed bug with FTS against tables with hyphens in the name,2017-11-20T05:59:53Z,2017-11-20T05:59:53Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 b4e6211a9729b5df340c6e210177ee86098b8480,Refactored filter logic and added human descriptions - refs #86,2017-11-20T06:03:24Z,2017-11-20T06:03:24Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 771b0ee34789750fdec176c3129eeaa6a6523041,"Initial implementation of ?_group_count=column URL shortcut for counting rows grouped by one or more columns. ?_group_count=column1&_group_count=column2 works as well. SQL generated looks like this: select ""qSpecies"", count(*) as ""count"" from Street_Tree_List group by ""qSpecies"" order by ""count"" desc limit 100 Or for two columns like this: select ""qSpecies"", ""qSiteInfo"", count(*) as ""count"" from Street_Tree_List group by ""qSpecies"", ""qSiteInfo"" order by ""count"" desc limit 100 Refs #44 Still todo: clean up code a bunch (it currently fakes being a 'view'), get foreign key expansion working.",2017-11-20T06:04:13Z,2017-11-20T06:04:13Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 0331666e346c68b86de4aa19fbb37f3a408d37ca,"?_search=x now works directly against fts virtual table Closes #135",2017-11-20T06:18:07Z,2017-11-20T06:18:07Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 a9b9d427915adc133814a022e554f042d5d82d4d,"Mark FTS-related tables as 'hidden' in inspect() Refs #129",2017-11-20T16:57:41Z,2017-11-21T20:55:59Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 fb505de11c882fa7f2522160509172561b5b8270,"Back-ported format strings for compatibility with Py 3.5 Also fixed a encoding error where Heroku --json return needs to be treated as UTF8",2017-11-22T17:42:29Z,2017-11-22T17:42:29Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 1c8638c30ae9b1e59dd045cf6d0b20e6dc630e5b,"Hide FTS-created tables on index pages Closes #129",2017-11-22T20:12:15Z,2017-11-22T20:18:57Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 c8e7c85fd3db46081d61d6071ab1140e8291325e,Updated test_database_page test,2017-11-22T20:25:51Z,2017-11-22T20:25:51Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 53534b6e9d3956cdb6aa9c062d2beffdd89fa7d9,"Even more complicated redirect scheme This: ?_filter_column_1=name&_filter_op_1=contains&_filter_value_1=hello &_filter_column_2=age&_filter_op_2=gte&_filter_value_2=12 Now redirects to this: ?name__contains=hello&age__gte=12 This is needed for the filter editing interface, refs #86",2017-11-23T04:03:46Z,2017-11-23T04:03:46Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 0071b5d6f5c97b9896dbcfc8f95ca0db8652a18a,"Added UI for editing table filters Refs #86",2017-11-23T04:33:55Z,2017-11-23T04:33:55Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 82c20ea36eb86fc68a48f219e96305477864d589,Added '- pick a column -' as first option,2017-11-23T04:39:53Z,2017-11-23T04:39:53Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 72e328dccf6def3328290a1a6cd7e7ab22ab0de2,Removed rogue print statement,2017-11-23T04:40:15Z,2017-11-23T04:40:15Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 38dc1ef73b13e5ae9f05ca5e7c86fa3eb639e628,Show linked foreign key in table cells,2017-11-23T04:43:27Z,2017-11-23T04:43:27Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 2f97834d0e47fdcd160bab6a3eb1ffd2f836771d,NBSP before ID display,2017-11-23T04:45:04Z,2017-11-23T04:45:04Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 a74e455cede3070db4138500ba0d3f354d58c436,"Custom styled select boxes for filters Refs #86",2017-11-23T15:58:55Z,2017-11-23T15:58:55Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 22b91dd95be59148c02991a1bb56df6d82f45b6f,"Further tweaks to select/input filter styling Refs #86 - thanks for the help, @natbat!",2017-11-23T20:05:51Z,2017-11-23T20:05:51Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 ef3eacf622e69723d48ab1ad597645770a7361db,Select option for removing filters,2017-11-23T20:32:54Z,2017-11-23T20:32:54Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 77088876813fea833b6fc3eb588ecc9b02f0a7d7,Tweaked styling of submit buttons and search box,2017-11-23T20:39:26Z,2017-11-23T20:39:26Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 a30c5b220c15360d575e94b0e67f3255e120b916,"Fixed bug on rows page, added unit test Rows page for rows that linked to the same table in more than one columns were display incorrectly. Fixed that and added a test. Also introduced /db/table/row-pk.json?_extras=foreign_key_tables This is used by the new unit test, but is the first example of a new ?_extras=comma-separated-list pattern I am introducing.",2017-11-23T21:09:45Z,2017-11-23T21:09:45Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 4b7596ee5caf68c9b1acd17866f88a57b23db3c4,"Row page now resolves foreign keys Closes #132",2017-11-23T21:51:16Z,2017-11-23T21:51:16Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 b45077839100a57adbc284ad5bf555002da819e8,"Added column__not=blah filter Closes #148",2017-11-23T22:09:50Z,2017-11-23T22:09:50Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 ab32bd64272886440c92c2fff846faa35b761158,"Fixed bug with params other than p0 p1 and upwards were not correctly extracted.",2017-11-24T21:55:00Z,2017-11-24T21:55:00Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 a53d09d91910e4af5552a6c1e73d1468a67b7962,"Show count of matching rows on table view Closes #127",2017-11-24T22:01:53Z,2017-11-24T22:01:53Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 8a37baba14bc00d782fb6701d1f32e1687f10305,"Much tidier design for table view header Closes #147",2017-11-24T22:02:39Z,2017-11-24T22:02:39Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 a802cbee74d8c83876375890d914252f1adb1c96,"Search now applies to current filters Combined search into the same form as filters. Closes #133",2017-11-24T22:22:57Z,2017-11-24T22:29:54Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 a81c62d8481d8cf97be5c5c61931e5e5bea2fbf3,"Tweaked custom SQL results display Closes #149",2017-11-24T22:41:31Z,2017-11-24T22:41:31Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 c5c923d93c26f312b713b81c8d08db5c3279a23a,Don't incorrectly detect VIEWs as supporting FTS,2017-11-24T22:51:00Z,2017-11-24T22:51:00Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 e3dd2483bb78f3d4b80db6de5475ceb163155b80,Fixed quoting on foreign-key links to tables with spaces in name,2017-11-25T00:05:28Z,2017-11-25T00:05:28Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 17fee0cc1411b69d66d4401120f96c5087b16841,"Automatically deploy tags as PyPI releases https://docs.travis-ci.com/user/deployment/pypi/",2017-11-25T03:02:55Z,2017-11-25T03:32:47Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 c160f15c3937f8fbe581276f811e8c58f9137bb1,Release version 0.13,2017-11-25T03:33:39Z,2017-11-25T03:33:39Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 de6c62ed9a30b12b22fded13d492b1f193cfc728,Load SQLite extensions inside .inspect() too,2017-11-26T22:51:42Z,2017-11-26T23:02:00Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 36701c85928b1eb785527ffd11cd941b31087ea3,datasette build now takes --load-extension,2017-11-26T23:01:53Z,2017-11-26T23:02:01Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 0120c24927af364304574ab1a58e417094e01c22,"extra_css_urls/extra_js_urls in metadata, refs #153 A mechanism in the metadata.json format for adding custom CSS and JS urls. Create a metadata.json file that looks like this: { ""extra_css_urls"": [ ""https://simonwillison.net/static/css/all.bf8cd891642c.css"" ], ""extra_js_urls"": [ ""https://code.jquery.com/jquery-3.2.1.slim.min.js"" ] } Then start datasette like this: datasette mydb.db --metadata=metadata.json The CSS and JavaScript files will be linked in the of every page. You can also specify a SRI (subresource integrity hash) for these assets: { ""extra_css_urls"": [ { ""url"": ""https://simonwillison.net/static/css/all.bf8cd891642c.css"", ""sri"": ""sha384-9qIZekWUyjCyDIf2YK1FRoKiPJq4PHt6tp/ulnuuyRBvazd0hG7pWbE99zvwSznI"" } ], ""extra_js_urls"": [ { ""url"": ""https://code.jquery.com/jquery-3.2.1.slim.min.js"", ""sri"": ""sha256-k2WSCIexGzOj3Euiig+TlR8gA0EmPjuc79OEeY5L45g="" } ] } Modern browsers will only execute the stylsheet or JavaScript if the SRI hash matches the content served. You can generate hashes using www.srihash.org",2017-11-29T02:38:15Z,2017-11-29T02:38:15Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 b67890d15d164c7affb2887e5737534628dc6227,"Auto-link column values that look like URLs Refs #153",2017-11-29T17:05:24Z,2017-11-29T17:05:24Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 8ab3a169d42d096f2c7979c6d3d7746618d30f0b,"CSS styling hooks as classes on the body Refs #153 Every template now gets CSS classes in the body designed to support custom styling. The index template (the top level page at /) gets this: The database template (/dbname/) gets this: The table template (/dbname/tablename) gets: The row template (/dbname/tablename/rowid) gets: The db-x and table-x classes use the database or table names themselves IF they are valid CSS identifiers. If they aren't, we strip any invalid characters out and append a 6 character md5 digest of the original name, in order to ensure that multiple tables which resolve to the same stripped character version still have different CSS classes. Some examples (extracted from the unit tests): ""simple"" => ""simple"" ""MixedCase"" => ""MixedCase"" ""-no-leading-hyphens"" => ""no-leading-hyphens-65bea6"" ""_no-leading-underscores"" => ""no-leading-underscores-b921bc"" ""no spaces"" => ""no-spaces-7088d7"" ""-"" => ""336d5e"" ""no $ characters"" => ""no--characters-59e024""",2017-11-30T07:09:54Z,2017-11-30T07:09:54Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 ffa77f62b46e1ddf2f848f5da10a1e958323a084,"Removed dependency on sanic-jinja2 I wasn't using any of the functionality it adds on top of raw Jinja2. Refs #12 and #153",2017-11-30T15:51:40Z,2017-11-30T15:51:40Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 7ff51598c468deb1d2c0d4c23a808458c9b1e3a2,"git commit -m ""datasette --template-dir=mytemplates/"" argument You can now pass an additional argument specifying a directory to look for custom templates in. Datasette will fall back on the default templates if a template is not found in that directory. Refs #12, #153",2017-11-30T16:05:01Z,2017-11-30T16:05:01Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 3cd06729f457d690603b6060dc552b535517ab09,"Ability to over-ride templates for individual tables/databases It is now possible to over-ride templates on a per-database / per-row or per- table basis. When you access e.g. /mydatabase/mytable Datasette will look for the following: - table-mydatabase-mytable.html - table.html If you provided a --template-dir argument to datasette serve it will look in that directory first. The lookup rules are as follows: Index page (/): index.html Database page (/mydatabase): database-mydatabase.html database.html Table page (/mydatabase/mytable): table-mydatabase-mytable.html table.html Row page (/mydatabase/mytable/id): row-mydatabase-mytable.html row.html If a table name has spaces or other unexpected characters in it, the template filename will follow the same rules as our custom CSS classes introduced in 8ab3a169d42d096f - for example, a table called ""Food Trucks"" will attempt to load the following templates: table-mydatabase-Food-Trucks-399138.html table.html It is possible to extend the default templates using Jinja template inheritance. If you want to customize EVERY row template with some additional content you can do so by creating a row.html template like this: {% extends ""default:row.html"" %} {% block content %}

EXTRA HTML AT THE TOP OF THE CONTENT BLOCK

This line renders the original block:

{{ super() }} {% endblock %} Closes #12, refs #153",2017-11-30T16:30:10Z,2017-11-30T16:38:16Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 cf46b86cf736aadd5147f85bfd6ff44c29655fde,Switch to sphinx_rtd_theme,2017-11-30T16:56:20Z,2017-11-30T16:56:20Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 601934936c9e6e0007aca13547b73c3b36343f7f,"Documentation for custom CSS/JavaScript/Templates Will go live at http://datasette.readthedocs.io/en/latest/custom_templates.html Closes #156",2017-11-30T17:09:48Z,2017-11-30T17:09:48Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 1feb5735dad538312fac8b76705c05516250967b,Moved getting started into separate docs page,2017-11-30T18:27:00Z,2017-11-30T18:27:00Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 e981ac7d4d1e1603257369eb5edba0fc4fdf5ae9,"--static option for datasette serve You can now tell Datasette to serve static files from a specific location at a specific mountpoint. For example: datasette serve mydb.db --static extra-css:/tmp/static/css Now if you visit this URL: http://localhost:8001/extra-css/blah.css The following file will be served: /tmp/static/css/blah.css Refs #160",2017-12-03T16:33:36Z,2017-12-03T16:33:36Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 0cfd7ce59d9018eb07af8f9e20f7d04308c9d01d,"Allow WITH query (previously we required SELECT at start) Fixes #161",2017-12-04T04:51:31Z,2017-12-04T04:51:31Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 a743cdeafca0e5d011c282a53baf753c85d01516,"Canned query support + database/query template refactor Named canned queries can now be defined in metadata.json like this: { ""databases"": { ""timezones"": { ""queries"": { ""timezone_for_point"": ""select tzid from timezones ..."" } } } } These will be shown in a new ""Queries"" section beneath ""Views"" on the database page. As part of this, I refactored the logic for the database index page. It used to combine the functionality for listing available tables and the functionality for executing custom SQL queries in a single template and view. I have split that template out into database.html and query.html and reworked the view to more clearly separate the custom SQL executing code. Refs #20",2017-12-05T16:17:02Z,2017-12-05T16:17:02Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 b7b590b4149563ec6572f577632d7471b84dcb94,"Docs for query.html CSS/template, refs #20",2017-12-05T16:35:14Z,2017-12-05T16:35:14Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 7a4da7e5aedff3f61648d5530c4dc34de011ea8a,"Documentation for custom SQL queries http://datasette.readthedocs.io/en/latest/sql_queries.html Closes #20",2017-12-05T17:43:59Z,2017-12-05T17:43:59Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 709f4f2798d0490ae048094536bed7e973ea29f4,"Fixed bug with detecting FTS tables Closes #135",2017-12-07T04:54:25Z,2017-12-07T04:54:37Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 52a5e95d21c9b2b7b50f5bc423e3746ae0538734,"Fixed bug with filter columns Closes #162",2017-12-07T05:05:53Z,2017-12-07T05:05:53Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 198b8b2955b9d8a8a80ce850a92a99426c5f161f,"Fixed row page for tables with a primary key Closes #152",2017-12-07T05:23:13Z,2017-12-07T05:23:13Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 a2b954e82818d5aa4b4c313d9a687d6a7bdd04b5,Fixed #155,2017-12-07T05:39:47Z,2017-12-07T05:39:47Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 afbda9e210b6e5eae10a537c121cbb5e92cc8502,"All extra_head blocks now call super This means you can provide a custom base.html template that populates extra_head and any of the default child templates will still render content you included in that block. Refs #158",2017-12-07T05:58:42Z,2017-12-07T05:58:42Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 7e1ba161ec87b02cf7665a73188258f14036f892,"Ability to easily customize _rows_and_columns.html per database table Also added documentation for this. Refs #158, Closes #159.",2017-12-07T06:11:22Z,2017-12-07T06:11:22Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 32cf5a4a72c1c8d46dd302566fdcbf4793f2f927,"New datasette skeleton command for generating metadata.json Closes #164",2017-12-07T06:20:37Z,2017-12-07T06:20:37Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 515eaa8ccba0603de5b14679b74402f3ddf02bd7,--reload now reloads on metadata changes too,2017-12-07T16:42:28Z,2017-12-07T16:42:28Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 80bf3afa43e3cb396c7a7c9b168eedbc6fe0fa15,"metadata.json support for per-table/per-database metadata Also added support for descriptions and HTML descriptions. Here's an example metadata.json file illustrating custom per-database and per- table metadata: { ""title"": ""Overall datasette title"", ""description_html"": ""This is a description with HTML."", ""databases"": { ""db1"": { ""title"": ""First database"", ""description"": ""This is a string description & has no HTML"", ""license_url"": ""http://example.com/"", ""license"": ""The example license"", ""queries"": { ""canned_query"": ""select * from table1 limit 3;"" }, ""tables"": { ""table1"": { ""title"": ""Custom title for table1"", ""description"": ""Tables can have descriptions too"", ""source"": ""This has a custom source"", ""source_url"": ""http://example.com/"" } } } } } Closes #165, Refs #164",2017-12-07T16:42:54Z,2017-12-07T16:47:07Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 05399058062ba6df467c8745b87ece5f6951b39f,"Renamed ""datasette build"" command to ""datasette inspect"" Closes #130",2017-12-07T16:57:31Z,2017-12-07T16:57:31Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 9af2964f6fd4ae876ef8ecd2c14c2ffa61542fdb,"Documentation for metadata.json and ""datasette skeleton"" command http://datasette.readthedocs.io/en/latest/metadata.html Closes #166",2017-12-07T17:19:35Z,2017-12-07T17:19:35Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 cbfd6b745eabf51295e5a5e0ea57a0f93d63b37d,"Publish should now work if /tmp is on different device Fixes #141",2017-12-08T16:06:24Z,2017-12-08T16:06:24Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 61e3c5a1e904a6e1cbee86ba1494b5cb4b5820cf,"Removed rogue print statement, refs #141",2017-12-08T16:08:00Z,2017-12-08T16:08:00Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 16dfccb1c569359fa2a03639ada233e7661156af,"Include sha1 hash in /static/app.css URL This means that when Datasette's CSS changes the new CSS will be loaded even though browsers may have cached the previous version. Closes #154",2017-12-09T03:10:09Z,2017-12-09T03:10:09Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 c195ee4d46f2577b1943836a8270d84c8341d138,"package and publish commands now accept --static and --template-dir Example usage: datasette package --static css:extra-css/ --static js:extra-js/ \ sf-trees.db --template-dir templates/ --tag sf-trees --branch master This creates a local Docker image that includes copies of the templates/, extra-css/ and extra-js/ directories. You can then run it like this: docker run -p 8001:8001 sf-trees For publishing to Zeit now: datasette publish now --static css:extra-css/ --static js:extra-js/ \ sf-trees.db --template-dir templates/ --name sf-trees --branch master Example: https://sf-trees-wbihszoazc.now.sh/sf-trees-02c8ef1/Street_Tree_List For publishing to Heroku: datasette publish heroku --static css:extra-css/ --static js:extra-js/ \ sf-trees.db --template-dir templates/ --branch master Closes #157, #160",2017-12-09T18:19:39Z,2017-12-09T18:28:49Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 b01304d7070df5a02870ebd204ea093f3742029e,Updated tests I broke in c195ee4,2017-12-09T18:38:04Z,2017-12-09T18:39:19Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 1c0d93c39b194103e729aed2496d2d24f5ad4850,Fix Python 3.5 test failure,2017-12-09T18:39:16Z,2017-12-09T18:39:19Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 3c9f889715249d7b0b3bc014529073066a1d478d,"Custom templates for canned queries Closes #170",2017-12-09T21:34:46Z,2017-12-09T21:34:46Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 7126d08f10d637c9f1af346324f6f7c0fece8be4,"HTML comment showing which templates were considered for a page Closes #171",2017-12-09T21:47:32Z,2017-12-09T21:47:32Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 3f2fed109395179de4145ca1a2675360f1717225,"Fixed bug with HTML labels loop.counter is incorrect - loop.index outputs the correct loop value.",2017-12-09T21:57:36Z,2017-12-09T21:57:36Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 7a7e4b2ed8c76c6d002a9d707dbc840f6a2abf7f,"Started unit tests for row/table HTML pages Refs #167 Thanks to the new tests, spotted and fixed a bug where pages that were supposed to have 100 things on them were actually displaying 101.",2017-12-09T23:32:54Z,2017-12-09T23:32:54Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 794c3bfcfc03087bbebffb7b228e81aaa8b72183,"Cleaned up row/column display logic, fixed bug Closes #167",2017-12-10T00:59:25Z,2017-12-10T00:59:25Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 7db790fbf999d83275a5bde4563d935a58a3d787,"Release notes for 0.14 Also updated ""datasette serve"" help in getting started docs.",2017-12-10T01:24:57Z,2017-12-10T01:26:32Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 ae940068096ad9ff2f27f4e1784c87788d53eb3d,"No longer include database hash in hyperlinks It was making the unit tests unreliable. Also we do not do that for foreign key links.",2017-12-10T01:31:08Z,2017-12-10T01:31:08Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 2edc652df6d786e4f2c3f073e3567002d248be09,Releasing v0.14,2017-12-10T01:33:24Z,2017-12-10T01:33:24Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 68a34bc222af586c75daa5166c937f3f26cfefac,"Deploy to Heroku with Python 3.6.3 Heroku deploys are currently showing the following warning: The latest version of Python 3 is python-3.6.3 (you are using python-3.6.2, which is unsupported). We recommend upgrading by specifying the latest version (python-3.6.3).",2017-12-10T02:01:17Z,2017-12-10T02:01:17Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 1aad396c9ef46837b224607086c09f48ac921165,"Fixed bug with .json path regular expression I had a table called ""geojson"" and it caused an exception because the regex was matching .json and not \.json",2017-12-13T05:32:43Z,2017-12-13T05:36:03Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 306e1c6ac4f00cc25d676a6ee660938f5b27427c,Broke up test_app into test_api and test_html,2017-12-15T12:04:17Z,2017-12-15T12:08:24Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 e63f432fe521eb8e196049f86742dc9e20f4dc35,Mention Heroku in docs index page,2018-01-10T04:46:34Z,2018-01-10T04:46:34Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 cac32b0ec4081c00bb6eb9122d61dccfae729199,Initial documentation for pagination,2018-01-10T04:47:03Z,2018-01-10T04:47:03Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 012fc7c5cd3e9160c9a4c19cc964253e97fb054a,Fix for FTS virtual table counting error,2018-03-21T01:26:04Z,2018-03-21T01:26:04Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 89d9fbb91bfc0dd9091b34dbf3cf540ab849cc44,"Database/Table views inherit source/license/source_url/license_url metadata If you set the source_url/license_url/source/license fields in your root metadata those values will now be inherited all the way down to the database and table templates. The title/description are NOT inherited. Also added unit tests for the HTML generated by the metadata. Refs #185",2018-03-27T16:18:32Z,2018-03-27T16:18:32Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 31f63d1672a9214962cd7335a2daeabab7c0000e,"Fixed bug with keyset pagination over compound primary keys Closes #190",2018-03-30T05:10:09Z,2018-03-30T05:11:02Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 7365c3f51cedffade3428a677e5baeab2f401138,"Compound primary key _next= now plays well with extra filters Closes #190",2018-03-30T06:26:22Z,2018-03-30T06:26:22Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 8f0d44d6468a96e9b78487c36da20ddc2ae9d937,"escape_sqlite_table_name => escape_sqlite, handles reserved words It can be used for column names as well as table names. Reserved word list from https://www.sqlite.org/lang_keywords.html",2018-04-03T13:39:50Z,2018-04-03T13:40:49Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 dd0566ff8eda7fa2f0d92e51809581fae62cffed,"Utility for writing test database fixtures to a .db file python tests/fixtures.py /tmp/hello.db This is useful for making a SQLite database of the test fixtures for interactive exploration.",2018-04-03T13:46:11Z,2018-04-03T13:46:11Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 b2188f044265c95f7e54860e28107c17d2a6ed2e,Use .custom_sql() for _group_count implementation (refs #150),2018-04-08T15:42:56Z,2018-04-08T15:43:45Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 29f9a29250169cdb564020109f76e0f4b52afa5d,Total row count now correct even if _next= applied,2018-04-08T23:13:52Z,2018-04-09T05:10:22Z,13ae486343ea6454a93114c6f558ffea2f2c6874,2946d096d0cdefdc017559e6b57e87658736e843,107914493,9599,9599 f3a3820ff5c5ba9b4af102e65ed1f084b1fe704d,"_sort and _sort_desc parameters for table views Allows for paginated sorted results based on a specified column. Refs #189",2018-04-09T00:06:10Z,2018-04-09T05:10:22Z,13ae486343ea6454a93114c6f558ffea2f2c6874,2946d096d0cdefdc017559e6b57e87658736e843,107914493,9599,9599 9f2ec39fbc5481b0fa6585ccdd159ba9fd989bcc,"Current sort order now reflected in human filter description Plus renamed human_description to human_description_en Refs #189",2018-04-09T01:01:23Z,2018-04-09T05:10:22Z,13ae486343ea6454a93114c6f558ffea2f2c6874,2946d096d0cdefdc017559e6b57e87658736e843,107914493,9599,9599 747a801b50487cd4cc20856d44252ac0a6cb346f,Column headers now link to sort/desc sort - refs #189,2018-04-09T02:08:28Z,2018-04-09T05:10:22Z,13ae486343ea6454a93114c6f558ffea2f2c6874,2946d096d0cdefdc017559e6b57e87658736e843,107914493,9599,9599 bfb19e3a178ba9b2dab2f90f90a398b54a73d34e,Correctly escape sort-by columns in SQL (refs #189),2018-04-09T02:25:14Z,2018-04-09T05:10:22Z,13ae486343ea6454a93114c6f558ffea2f2c6874,2946d096d0cdefdc017559e6b57e87658736e843,107914493,9599,9599 a87df963a08054ad7a652f0218e70ddb7f9cc8bd,"Error handling for ?_sort and ?_sort_desc Verifies that they match an existing column, and only one or the other option is provided - refs #189 Eses a new DatasetteError exception that closes #193",2018-04-09T04:07:31Z,2018-04-09T05:10:22Z,13ae486343ea6454a93114c6f558ffea2f2c6874,2946d096d0cdefdc017559e6b57e87658736e843,107914493,9599,9599 b13f0986f26d88938519b07871c961c0b5a97802,"New sortable_columns option in metadata.json to control sort options You can now explicitly set which columns in a table can be used for sorting using the _sort and _sort_desc arguments using metadata.json: { ""databases"": { ""database1"": { ""tables"": { ""example_table"": { ""sortable_columns"": [ ""height"", ""weight"" ] } } } } } Refs #189",2018-04-09T04:58:25Z,2018-04-09T05:10:22Z,13ae486343ea6454a93114c6f558ffea2f2c6874,2946d096d0cdefdc017559e6b57e87658736e843,107914493,9599,9599 23e0fdb0f3196ffa4d8bc4944c8bc9cb0f89129b,"Removed unnecessary enumerate template helper I made this obsolete in d1756d773685ca4f9c5b57fb40e1aa743bc95525 Refs #189",2018-04-09T05:02:19Z,2018-04-09T05:10:22Z,13ae486343ea6454a93114c6f558ffea2f2c6874,2946d096d0cdefdc017559e6b57e87658736e843,107914493,9599,9599 c1d37fdf2be84fb07155bb1b1f61057444b03300,"Fixed bug with human filter description, refs #189 We were showing this: 201 rows where sorted by sortable_with_nulls We now show this: 201 rows sorted by sortable_with_nulls",2018-04-09T05:07:18Z,2018-04-09T05:10:22Z,13ae486343ea6454a93114c6f558ffea2f2c6874,2946d096d0cdefdc017559e6b57e87658736e843,107914493,9599,9599 a290f28caae61b47e76e825c06984f22fc41a694,"table_rows => table_rows_count, filtered_table_rows => filtered_table_rows_count Renamed properties. Closes #194",2018-04-09T05:24:24Z,2018-04-09T05:24:24Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 7706fe0c67aba5cfe905c7906cae9e0c43cd75b2,Releasing v0.15,2018-04-09T15:48:24Z,2018-04-09T15:48:24Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599 57b19f09d1ee24b7369ceca8937ce67df2ca1abc,"Ability to sort using form fields (for mobile portrait mode) We now display sort options as a select box plus a descending checkbox, which means you can apply sort orders even in portrait mode on a mobile phone where the column headers are hidden. Closes #199",2018-04-10T00:30:44Z,2018-04-10T00:34:32Z,13ae486343ea6454a93114c6f558ffea2f2c6874,13ae486343ea6454a93114c6f558ffea2f2c6874,107914493,9599,9599