"""Custom types for the GSheets adapter."""
from typing import Any, List
from typing_extensions import Literal, TypedDict
[docs]
class UrlArgs(TypedDict, total=False):
"""
URL arguments for a sheet.
The sheet will have either a "gid" (sheet ID) or a sheet name
under "sheet". Optionally, it can also have the number of
header rows.
"""
# optional
headers: int
# one of these will be present
gid: int
sheet: str
[docs]
class QueryResultsColumn(TypedDict, total=False):
"""
Metadata describing a column from the Google Chart API.
An example::
{"id": "A", "label": "country", "type": "string"}
{"id": "B", "label": "cnt", "type": "number", "pattern": "General"}
"""
id: str
label: str
type: str
pattern: str # optional
[docs]
class QueryResultsCell(TypedDict, total=False):
"""
A single cell from the Google Chart API.
An example::
{"v": 1.0, "f": 1 }
{"v": "BR"}
"""
v: Any
f: str # optional
[docs]
class QueryResultsRow(TypedDict):
"""
A row of results from the Google Chart API.
An example::
{
"c": [{"v": "BR"}, {"v": 1.0, "f": "1"}]
}
"""
c: List[QueryResultsCell]
[docs]
class QueryResultsTable(TypedDict):
"""
A table with results from the Google Chart API.
An example::
{
"cols": [
{"id": "A", "label": "country", "type": "string"},
{"id": "B", "label": "cnt", "type": "number", "pattern": "General"},
],
"rows": [{"c": [{"v": "BR"}, {"v": 1.0, "f": "1"}]}],
"parsedNumHeaders": 0,
}
"""
cols: List[QueryResultsColumn]
rows: List[QueryResultsRow]
parsedNumHeaders: int
[docs]
class QueryResultsError(TypedDict):
"""
Query errors from the Google Chart API.
The API returns a list of errors like this::
{
"reason": "invalid_query",
"message": "INVALID_QUERY",
"detailed_message": "Invalid query: NO_COLUMN: C",
}
"""
reason: str
message: str
detailed_message: str
[docs]
class QueryResults(TypedDict, total=False):
"""
Query results from the Google Chart API.
Successful query::
{
"version": "0.6",
"reqId": "0",
"status": "ok",
"sig": "1453301915",
"table": {
"cols": [
{"id": "A", "label": "country", "type": "string"},
{"id": "B", "label": "cnt", "type": "number", "pattern": "General"},
],
"rows": [{"c": [{"v": "BR"}, {"v": 1.0, "f": "1"}]}],
"parsedNumHeaders": 0,
},
}
Failed::
{
"version": "0.6",
"reqId": "0",
"status": "error",
"errors": [
{
"reason": "invalid_query",
"message": "INVALID_QUERY",
"detailed_message": "Invalid query: NO_COLUMN: C",
}
],
}
"""
version: str
reqId: str
status: Literal["ok", "error"]
sig: str
table: QueryResultsTable
errors: List[QueryResultsError]