{"ok": true, "next": null, "rows": [{"id": "upgrade-1.0a20:update-datasette-metadata-calls", "page": "upgrade-1.0a20", "ref": "update-datasette-metadata-calls", "title": "Update datasette.metadata() calls", "content": "The  datasette.metadata()  method has been removed. Use these methods instead: \n                 Old code: \n                 try:\n    title = datasette.metadata(database=database)[\"queries\"][query_name][\"title\"]\nexcept (KeyError, TypeError):\n    pass\n \n                 New code: \n                 try:\n    query_info = await datasette.get_canned_query(database, query_name, request.actor)\n    if query_info and \"title\" in query_info:\n        title = query_info[\"title\"]\nexcept (KeyError, TypeError):\n    pass", "breadcrumbs": "[\"Datasette 1.0a20 plugin upgrade guide\", \"Migrating from metadata= to config=\"]", "references": "[]"}, {"id": "upgrade-1.0a20:update-query-urls-in-tests", "page": "upgrade-1.0a20", "ref": "update-query-urls-in-tests", "title": "Update query URLs in tests", "content": "Datasette now redirects  ?sql=  parameters from database pages to the query view: \n                 Old code: \n                 response = await ds.client.get(\"/_memory.atom?sql=select+1\")\n \n                 New code: \n                 response = await ds.client.get(\"/_memory/-/query.atom?sql=select+1\")", "breadcrumbs": "[\"Datasette 1.0a20 plugin upgrade guide\", \"Migrating from metadata= to config=\"]", "references": "[]"}, {"id": "upgrade-1.0a20:update-render-functions-to-async", "page": "upgrade-1.0a20", "ref": "update-render-functions-to-async", "title": "Update render functions to async", "content": "If your plugin's render function needs to call  datasette.get_canned_query()  or other async Datasette methods, it must be declared as async: \n                 Old code: \n                 def render_atom(datasette, request, sql, columns, rows, database, table, query_name, view_name, data):\n    # ...\n    if query_name:\n        title = datasette.metadata(database=database)[\"queries\"][query_name][\"title\"]\n \n                 New code: \n                 async def render_atom(datasette, request, sql, columns, rows, database, table, query_name, view_name, data):\n    # ...\n    if query_name:\n        query_info = await datasette.get_canned_query(database, query_name, request.actor)\n        if query_info and \"title\" in query_info:\n            title = query_info[\"title\"]", "breadcrumbs": "[\"Datasette 1.0a20 plugin upgrade guide\", \"Migrating from metadata= to config=\"]", "references": "[]"}, {"id": "upgrade-1.0a20:update-test-constructors", "page": "upgrade-1.0a20", "ref": "update-test-constructors", "title": "Update test constructors", "content": "Old code: \n                 ds = Datasette(\n    memory=True,\n    metadata={\n        \"databases\": {\n            \"_memory\": {\"queries\": {\"my_query\": {\"sql\": \"select 1\", \"title\": \"My Query\"}}}\n        },\n        \"plugins\": {\n            \"my-plugin\": {\"setting\": \"value\"}\n        }\n    }\n)\n \n                 New code: \n                 ds = Datasette(\n    memory=True,\n    config={\n        \"databases\": {\n            \"_memory\": {\"queries\": {\"my_query\": {\"sql\": \"select 1\", \"title\": \"My Query\"}}}\n        },\n        \"plugins\": {\n            \"my-plugin\": {\"setting\": \"value\"}\n        }\n    }\n)", "breadcrumbs": "[\"Datasette 1.0a20 plugin upgrade guide\", \"Migrating from metadata= to config=\"]", "references": "[]"}, {"id": "upgrade_guide:update-datasette-metadata-calls", "page": "upgrade_guide", "ref": "update-datasette-metadata-calls", "title": "Update datasette.metadata() calls", "content": "The  datasette.metadata()  method has been removed. Use these methods instead: \n                     Old code: \n                     try:\n    title = datasette.metadata(database=database)[\"queries\"][query_name][\"title\"]\nexcept (KeyError, TypeError):\n    pass\n \n                     New code: \n                     try:\n    query_info = await datasette.get_canned_query(database, query_name, request.actor)\n    if query_info and \"title\" in query_info:\n        title = query_info[\"title\"]\nexcept (KeyError, TypeError):\n    pass", "breadcrumbs": "[\"Upgrade guide\", \"Datasette 1.0a20 plugin upgrade guide\", \"Migrating from metadata= to config=\"]", "references": "[]"}, {"id": "upgrade_guide:update-query-urls-in-tests", "page": "upgrade_guide", "ref": "update-query-urls-in-tests", "title": "Update query URLs in tests", "content": "Datasette now redirects  ?sql=  parameters from database pages to the query view: \n                     Old code: \n                     response = await ds.client.get(\"/_memory.atom?sql=select+1\")\n \n                     New code: \n                     response = await ds.client.get(\"/_memory/-/query.atom?sql=select+1\")", "breadcrumbs": "[\"Upgrade guide\", \"Datasette 1.0a20 plugin upgrade guide\", \"Migrating from metadata= to config=\"]", "references": "[]"}, {"id": "upgrade_guide:update-render-functions-to-async", "page": "upgrade_guide", "ref": "update-render-functions-to-async", "title": "Update render functions to async", "content": "If your plugin's render function needs to call  datasette.get_canned_query()  or other async Datasette methods, it must be declared as async: \n                     Old code: \n                     def render_atom(datasette, request, sql, columns, rows, database, table, query_name, view_name, data):\n    # ...\n    if query_name:\n        title = datasette.metadata(database=database)[\"queries\"][query_name][\"title\"]\n \n                     New code: \n                     async def render_atom(datasette, request, sql, columns, rows, database, table, query_name, view_name, data):\n    # ...\n    if query_name:\n        query_info = await datasette.get_canned_query(database, query_name, request.actor)\n        if query_info and \"title\" in query_info:\n            title = query_info[\"title\"]", "breadcrumbs": "[\"Upgrade guide\", \"Datasette 1.0a20 plugin upgrade guide\", \"Migrating from metadata= to config=\"]", "references": "[]"}, {"id": "upgrade_guide:update-test-constructors", "page": "upgrade_guide", "ref": "update-test-constructors", "title": "Update test constructors", "content": "Old code: \n                     ds = Datasette(\n    memory=True,\n    metadata={\n        \"databases\": {\n            \"_memory\": {\"queries\": {\"my_query\": {\"sql\": \"select 1\", \"title\": \"My Query\"}}}\n        },\n        \"plugins\": {\n            \"my-plugin\": {\"setting\": \"value\"}\n        }\n    }\n)\n \n                     New code: \n                     ds = Datasette(\n    memory=True,\n    config={\n        \"databases\": {\n            \"_memory\": {\"queries\": {\"my_query\": {\"sql\": \"select 1\", \"title\": \"My Query\"}}}\n        },\n        \"plugins\": {\n            \"my-plugin\": {\"setting\": \"value\"}\n        }\n    }\n)", "breadcrumbs": "[\"Upgrade guide\", \"Datasette 1.0a20 plugin upgrade guide\", \"Migrating from metadata= to config=\"]", "references": "[]"}], "truncated": false}