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