Skip to content

Commit 59a7b18

Browse files
Merge pull request #6 from mindsdb/exceptions
Improvement in exception managing
2 parents afa7529 + 6fd6f83 commit 59a7b18

File tree

4 files changed

+35
-12
lines changed

4 files changed

+35
-12
lines changed

minds/datasources/datasources.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from pydantic import BaseModel, Field
44

5+
import minds.exceptions as exc
56

67
class DatabaseConfig(BaseModel):
78

@@ -15,7 +16,6 @@ class DatabaseConfig(BaseModel):
1516
class Datasource(DatabaseConfig):
1617
...
1718

18-
1919
class Datasources:
2020
def __init__(self, client):
2121
self.api = client.api
@@ -25,8 +25,9 @@ def create(self, ds_config: DatabaseConfig, replace=False):
2525

2626
if replace:
2727
try:
28+
self.get(name)
2829
self.drop(name)
29-
except Exception:
30+
except exc.ObjectNotFound:
3031
...
3132

3233
self.api.post('/datasources', data=ds_config.model_dump())
@@ -44,9 +45,10 @@ def list(self) -> List[Datasource]:
4445

4546
def get(self, name: str) -> Datasource:
4647
data = self.api.get(f'/datasources/{name}').json()
48+
4749
# TODO skip not sql skills
4850
if data.get('engine') is None:
49-
raise RuntimeError(f'Datasource {name} is not found')
51+
raise exc.ObjectNotSupported(f'Wrong type of datasource: {name}')
5052
return Datasource(**data)
5153

5254
def drop(self, name: str):

minds/exceptions.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
class ObjectNotFound(Exception):
3+
...
4+
5+
6+
class ObjectNotSupported(Exception):
7+
...
8+
9+
10+
class UnknownError(Exception):
11+
...
12+

minds/minds.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
from openai import OpenAI
55

6+
import minds.exceptions as exc
7+
68
from minds.datasources import Datasource, DatabaseConfig
79

810
DEFAULT_PROMPT_TEMPLATE = 'Use your database tools to answer the user\'s question: {{question}}'
@@ -48,11 +50,12 @@ def update(
4850
if isinstance(ds, Datasource):
4951
ds = ds.name
5052
elif isinstance(ds, DatabaseConfig):
51-
# try to create
53+
# if not exists - create
5254
try:
55+
self.client.datasources.get(ds.name)
56+
except exc.ObjectNotFound:
5357
self.client.datasources.create(ds)
54-
except Exception:
55-
...
58+
5659
ds = ds.name
5760
elif not isinstance(ds, str):
5861
raise ValueError(f'Unknown type of datasource: {ds}')
@@ -143,8 +146,9 @@ def create(
143146

144147
if replace:
145148
try:
149+
self.get(name)
146150
self.drop(name)
147-
except Exception:
151+
except exc.ObjectNotFound:
148152
...
149153

150154
ds_names = []
@@ -153,11 +157,12 @@ def create(
153157
if isinstance(ds, Datasource):
154158
ds = ds.name
155159
elif isinstance(ds, DatabaseConfig):
156-
# try to create
160+
# if not exists - create
157161
try:
162+
self.client.datasources.get(ds.name)
163+
except exc.ObjectNotFound:
158164
self.client.datasources.create(ds)
159-
except Exception:
160-
...
165+
161166
ds = ds.name
162167
elif not isinstance(ds, str):
163168
raise ValueError(f'Unknown type of datasource: {ds}')

minds/rest_api.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
import requests
22

3+
import minds.exceptions as exc
4+
35

46
def _raise_for_status(response):
5-
# show response text in error
7+
if response.status_code == 404:
8+
raise exc.ObjectNotFound(response.text)
9+
610
if 400 <= response.status_code < 600:
7-
raise requests.HTTPError(f'{response.reason}: {response.text}', response=response)
11+
raise exc.UnknownError(f'{response.reason}: {response.text}')
812

913

1014
class RestAPI:

0 commit comments

Comments
 (0)