Skip to content

Commit 0796d8e

Browse files
updated Datasource models and operations
1 parent 0279432 commit 0796d8e

File tree

1 file changed

+43
-59
lines changed

1 file changed

+43
-59
lines changed

minds/datasources/datasources.py

Lines changed: 43 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,63 @@
1-
from typing import List, Optional, Union
1+
from typing import List, Optional
22

3-
from pydantic import BaseModel, Field
3+
from pydantic import BaseModel
44
import minds.utils as utils
55
import minds.exceptions as exc
66

77

8-
class DatabaseConfigBase(BaseModel):
8+
class Datasource(BaseModel):
99
"""
10-
Base class
10+
Existed datasource. It is returned by this SDK when datasource is queried from server
1111
"""
1212
name: str
13-
tables: Union[List[str], None] = []
14-
15-
16-
class DatabaseTables(DatabaseConfigBase):
17-
"""
18-
Used when only database and tables are required to be defined. For example in minds.create
19-
"""
20-
...
21-
22-
23-
class DatabaseConfig(DatabaseConfigBase):
24-
"""
25-
Used to define datasource before creating it.
26-
"""
2713
engine: str
28-
description: Union[str, None] = ''
29-
connection_data: Union[dict, None] = {}
30-
31-
32-
class Datasource(DatabaseConfig):
33-
"""
34-
Existed datasource. It is returned by this SDK when datasource is queried from server
35-
"""
36-
...
14+
description: Optional[str] = None
15+
connection_data: Optional[dict] = None
3716

3817

3918
class Datasources:
4019
def __init__(self, client):
4120
self.api = client.api
4221

43-
def create(self, ds_config: DatabaseConfig, update=False):
44-
"""
45-
Create new datasource and return it
46-
47-
:param ds_config: datasource configuration, properties:
48-
- name: str, name of datatasource
49-
- engine: str, type of database handler, for example 'postgres', 'mysql', ...
50-
- description: str, description of the database. Used by mind to know what data can be got from it.
51-
- connection_data: dict, optional, credentials to connect to database
52-
- tables: list of str, optional, list of allowed tables
53-
:param update: if true - to update datasourse if exists, default is false
54-
:return: datasource object
22+
def create(
23+
self,
24+
name: str,
25+
engine: str,
26+
description: Optional[str] = None,
27+
connection_data: Optional[dict] = None,
28+
replace: bool = False,
29+
):
5530
"""
31+
Create new datasource.
5632
57-
name = ds_config.name
58-
33+
:param name: name of datasource.
34+
:param engine: type of database handler, for example 'postgres', 'mysql', ...
35+
:param description: str, optional, description of the database. Used by mind to know what data can be got from it.
36+
:param connection_data: dict, optional, credentials to connect to database.
37+
:return: Datasource object.
38+
"""
5939
utils.validate_datasource_name(name)
6040

61-
if update:
62-
self.api.put(f'/datasources/{name}', data=ds_config.model_dump())
63-
else:
64-
self.api.post('/datasources', data=ds_config.model_dump())
41+
if replace:
42+
try:
43+
self.get(name)
44+
self.drop(name)
45+
except exc.ObjectNotFound:
46+
...
47+
48+
data = {
49+
'name': name,
50+
'engine': engine,
51+
}
52+
if connection_data is not None:
53+
data['connection_data'] = connection_data
54+
if description is not None:
55+
data['description'] = description
56+
57+
self.api.post(
58+
'/datasources',
59+
data=data
60+
)
6561
return self.get(name)
6662

6763
def list(self) -> List[Datasource]:
@@ -74,9 +70,6 @@ def list(self) -> List[Datasource]:
7470
data = self.api.get('/datasources').json()
7571
ds_list = []
7672
for item in data:
77-
# TODO skip not sql skills
78-
if item.get('engine') is None:
79-
continue
8073
ds_list.append(Datasource(**item))
8174
return ds_list
8275

@@ -89,21 +82,12 @@ def get(self, name: str) -> Datasource:
8982
"""
9083

9184
data = self.api.get(f'/datasources/{name}').json()
92-
93-
# TODO skip not sql skills
94-
if data.get('engine') is None:
95-
raise exc.ObjectNotSupported(f'Wrong type of datasource: {name}')
9685
return Datasource(**data)
9786

98-
def drop(self, name: str, force=False):
87+
def drop(self, name: str):
9988
"""
10089
Drop datasource by name
10190
10291
:param name: name of datasource
103-
:param force: if True - remove from all minds, default: False
10492
"""
105-
data = None
106-
if force:
107-
data = {'cascade': True}
108-
109-
self.api.delete(f'/datasources/{name}', data=data)
93+
self.api.delete(f'/datasources/{name}')

0 commit comments

Comments
 (0)