id,page,ref,title,content,breadcrumbs,references 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_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=""]",[]