-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathdatasources.py
More file actions
126 lines (104 loc) · 3.42 KB
/
datasources.py
File metadata and controls
126 lines (104 loc) · 3.42 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
from typing import List, Optional, TYPE_CHECKING
from pydantic import BaseModel
import minds.exceptions as exc
if TYPE_CHECKING:
from minds.client import Client
class Datasource(BaseModel):
"""
Existed datasource. It is returned by this SDK when datasource is queried from server
"""
name: str
engine: str
description: Optional[str] = None
connection_data: Optional[dict] = None
created_at: str
modified_at: str
class Datasources:
def __init__(self, client: 'Client'):
self.api = client.api
def create(
self,
name: str,
engine: str,
description: Optional[str] = None,
connection_data: Optional[dict] = None,
replace: bool = False,
):
"""
Create new datasource.
:param name: name of datasource.
:param engine: type of database handler, for example 'postgres', 'mysql', ...
:param description: str, optional, description of the database. Used by mind to know what data can be got from it.
:param connection_data: dict, optional, credentials to connect to database.
:return: Datasource object.
"""
if replace:
try:
self.get(name)
self.drop(name)
except exc.ObjectNotFound:
...
data = {
'name': name,
'engine': engine,
}
if connection_data is not None:
data['connection_data'] = connection_data
if description is not None:
data['description'] = description
response = self.api.post(
'/datasources',
data=data
)
return Datasource(**response.json())
def update(
self,
name: str,
new_name: Optional[str] = None,
description: Optional[str] = None,
connection_data: Optional[dict] = None,
):
"""
Update existing datasource.
:param name: name of datasource to update.
:param new_name: new name of datasource.
:param description: str, optional, description of the database. Used by mind to know what data can be got from it.
:param connection_data: dict, optional, credentials to connect to database.
:return: Datasource object.
"""
data = {}
if new_name is not None:
data['name'] = new_name
if connection_data is not None:
data['connection_data'] = connection_data
if description is not None:
data['description'] = description
response = self.api.put(
f'/datasources/{name}',
data=data
)
return Datasource(**response.json())
def list(self) -> List[Datasource]:
"""
Returns list of datasources
:return: iterable datasources
"""
data = self.api.get('/datasources').json()
ds_list = []
for item in data:
ds_list.append(Datasource(**item))
return ds_list
def get(self, name: str) -> Datasource:
"""
Get datasource by name
:param name: name of datasource
:return: datasource object
"""
data = self.api.get(f'/datasources/{name}').json()
return Datasource(**data)
def drop(self, name: str):
"""
Drop datasource by name
:param name: name of datasource
"""
self.api.delete(f'/datasources/{name}')