mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
66 lines
1.6 KiB
Python
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"
|