id,page,ref,title,content,breadcrumbs,references upgrade-1.0a20:permissions-are-now-actions,upgrade-1.0a20,permissions-are-now-actions,Permissions are now actions,"The register_permissions() hook shoud be replaced with register_actions() . Old code: @hookimpl def register_permissions(datasette): return [ Permission( name=""explain-sql"", abbr=None, description=""Can explain SQL queries"", takes_database=True, takes_resource=False, default=False, ), Permission( name=""annotate-rows"", abbr=None, description=""Can annotate rows"", takes_database=True, takes_resource=True, default=False, ), Permission( name=""view-debug-info"", abbr=None, description=""Can view debug information"", takes_database=False, takes_resource=False, default=False, ), ] The new Action does not have a default= parameter. Here's the equivalent new code: from datasette import hookimpl from datasette.permissions import Action from datasette.resources import DatabaseResource, TableResource @hookimpl def register_actions(datasette): return [ Action( name=""explain-sql"", description=""Explain SQL queries"", resource_class=DatabaseResource, ), Action( name=""annotate-rows"", description=""Annotate rows"", resource_class=TableResource, ), Action( name=""view-debug-info"", description=""View debug information"", ), ] The abbr= is now optional and defaults to None . For actions that apply to specific resources (like databases or tables), specify the resource_class instead of takes_parent and takes_child . Note that view-debug-info does not specify a resource_class because it applies globally.","[""Datasette 1.0a20 plugin upgrade guide""]",[] upgrade_guide:permissions-are-now-actions,upgrade_guide,permissions-are-now-actions,Permissions are now actions,"The register_permissions() hook shoud be replaced with register_actions() . Old code: @hookimpl def register_permissions(datasette): return [ Permission( name=""explain-sql"", abbr=None, description=""Can explain SQL queries"", takes_database=True, takes_resource=False, default=False, ), Permission( name=""annotate-rows"", abbr=None, description=""Can annotate rows"", takes_database=True, takes_resource=True, default=False, ), Permission( name=""view-debug-info"", abbr=None, description=""Can view debug information"", takes_database=False, takes_resource=False, default=False, ), ] The new Action does not have a default= parameter. Here's the equivalent new code: from datasette import hookimpl from datasette.permissions import Action from datasette.resources import DatabaseResource, TableResource @hookimpl def register_actions(datasette): return [ Action( name=""explain-sql"", description=""Explain SQL queries"", resource_class=DatabaseResource, ), Action( name=""annotate-rows"", description=""Annotate rows"", resource_class=TableResource, ), Action( name=""view-debug-info"", description=""View debug information"", ), ] The abbr= is now optional and defaults to None . For actions that apply to specific resources (like databases or tables), specify the resource_class instead of takes_parent and takes_child . Note that view-debug-info does not specify a resource_class because it applies globally.","[""Upgrade guide"", ""Datasette 1.0a20 plugin upgrade guide""]",[]