datasette/datasette/resources.py
2025-10-20 16:23:14 -07:00

66 lines
1.6 KiB
Python

"""Core resource types for Datasette's permission system."""
from datasette.permissions import Resource
class InstanceResource(Resource):
"""The Datasette instance itself."""
name = "instance"
parent_name = None
def __init__(self):
super().__init__(parent=None, child=None)
@classmethod
def resources_sql(cls) -> str:
return "SELECT NULL AS parent, NULL AS child"
class DatabaseResource(Resource):
"""A database in Datasette."""
name = "database"
parent_name = "instance"
def __init__(self, database: str):
super().__init__(parent=database, child=None)
@classmethod
def resources_sql(cls) -> str:
return """
SELECT database_name AS parent, NULL AS child
FROM catalog_databases
"""
class TableResource(Resource):
"""A table in a database."""
name = "table"
parent_name = "database"
def __init__(self, database: str, table: str):
super().__init__(parent=database, child=table)
@classmethod
def resources_sql(cls) -> str:
return """
SELECT database_name AS parent, table_name AS child
FROM catalog_tables
"""
class QueryResource(Resource):
"""A canned query in a database."""
name = "query"
parent_name = "database"
def __init__(self, database: str, query: str):
super().__init__(parent=database, child=query)
@classmethod
def resources_sql(cls) -> str:
# TODO: Need catalog for queries
return "SELECT NULL AS parent, NULL AS child WHERE 0"