forked from databricks/databricks-sql-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrequests.py
More file actions
142 lines (104 loc) · 4.07 KB
/
requests.py
File metadata and controls
142 lines (104 loc) · 4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
"""
Request models for the SEA (Statement Execution API) backend.
These models define the structures used in SEA API requests.
"""
from typing import Dict, List, Any, Optional, Union
from dataclasses import dataclass, field
@dataclass
class StatementParameter:
"""Representation of a parameter for a SQL statement."""
name: str
value: Optional[str] = None
type: Optional[str] = None
@dataclass
class ExecuteStatementRequest:
"""Representation of a request to execute a SQL statement."""
session_id: str
statement: str
warehouse_id: str
disposition: str = "EXTERNAL_LINKS"
format: str = "JSON_ARRAY"
result_compression: Optional[str] = None
parameters: Optional[List[StatementParameter]] = None
wait_timeout: str = "10s"
on_wait_timeout: str = "CONTINUE"
row_limit: Optional[int] = None
query_tags: Optional[Dict[str, Optional[str]]] = None
def to_dict(self) -> Dict[str, Any]:
"""Convert the request to a dictionary for JSON serialization."""
result: Dict[str, Any] = {
"warehouse_id": self.warehouse_id,
"session_id": self.session_id,
"statement": self.statement,
"disposition": self.disposition,
"format": self.format,
"wait_timeout": self.wait_timeout,
"on_wait_timeout": self.on_wait_timeout,
}
if self.row_limit is not None and self.row_limit > 0:
result["row_limit"] = self.row_limit
if self.result_compression:
result["result_compression"] = self.result_compression
if self.parameters:
result["parameters"] = [
{
"name": param.name,
"value": param.value,
"type": param.type,
}
for param in self.parameters
]
# SEA API expects query_tags as an array of {key, value} objects.
# None values are represented by omitting the "value" field.
if self.query_tags:
result["query_tags"] = [
{"key": k, "value": v} if v is not None else {"key": k}
for k, v in self.query_tags.items()
]
return result
@dataclass
class GetStatementRequest:
"""Representation of a request to get information about a statement."""
statement_id: str
def to_dict(self) -> Dict[str, Any]:
"""Convert the request to a dictionary for JSON serialization."""
return {"statement_id": self.statement_id}
@dataclass
class CancelStatementRequest:
"""Representation of a request to cancel a statement."""
statement_id: str
def to_dict(self) -> Dict[str, Any]:
"""Convert the request to a dictionary for JSON serialization."""
return {"statement_id": self.statement_id}
@dataclass
class CloseStatementRequest:
"""Representation of a request to close a statement."""
statement_id: str
def to_dict(self) -> Dict[str, Any]:
"""Convert the request to a dictionary for JSON serialization."""
return {"statement_id": self.statement_id}
@dataclass
class CreateSessionRequest:
"""Representation of a request to create a new session."""
warehouse_id: str
session_confs: Optional[Dict[str, str]] = None
catalog: Optional[str] = None
schema: Optional[str] = None
def to_dict(self) -> Dict[str, Any]:
"""Convert the request to a dictionary for JSON serialization."""
result: Dict[str, Any] = {"warehouse_id": self.warehouse_id}
if self.session_confs:
result["session_confs"] = self.session_confs
if self.catalog:
result["catalog"] = self.catalog
if self.schema:
result["schema"] = self.schema
return result
@dataclass
class DeleteSessionRequest:
"""Representation of a request to delete a session."""
warehouse_id: str
session_id: str
def to_dict(self) -> Dict[str, str]:
"""Convert the request to a dictionary for JSON serialization."""
return {"warehouse_id": self.warehouse_id, "session_id": self.session_id}