Skip to content

Commit 6948523

Browse files
committed
feat: datasource api
1 parent b3c329e commit 6948523

File tree

3 files changed

+59
-8
lines changed

3 files changed

+59
-8
lines changed
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
from fastapi import APIRouter, HTTPException
2-
from ..crud.datasource import get_datasource_list
2+
from ..crud.datasource import get_datasource_list, check_status, create_ds
33
from common.core.deps import SessionDep
4+
from ..models.datasource import DatasourceConf, CoreDatasource
45

56
router = APIRouter(tags=["datasource"], prefix="/datasource")
67

78
@router.get("/list")
89
def datasource_list(session: SessionDep):
9-
return get_datasource_list(session=session)
10+
return get_datasource_list(session=session)
11+
12+
@router.post("/check")
13+
def check(session: SessionDep, conf: DatasourceConf):
14+
return check_status(session, conf)
15+
16+
@router.post("/add", response_model=CoreDatasource)
17+
def check(session: SessionDep, ds: CoreDatasource):
18+
return create_ds(session, ds)
Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,39 @@
11
from sqlmodel import Session, select
2-
from ..models.datasource import core_datasource
2+
from ..models.datasource import CoreDatasource, DatasourceConf
3+
import pyodbc
4+
import datetime
35

4-
def get_datasource_list(session: Session) -> core_datasource | None:
5-
statement = select(core_datasource)
6+
def get_datasource_list(session: Session) -> CoreDatasource:
7+
statement = select(CoreDatasource)
68
datasource_list = session.exec(statement).fetchall()
7-
return datasource_list
9+
return datasource_list
10+
11+
def check_status(session: Session, conf: DatasourceConf):
12+
conn_str = (
13+
"DRIVER={MySQL ODBC 9.3 Unicode Driver};" # todo driver config
14+
f"SERVER={conf.host};"
15+
f"DATABASE={conf.database};"
16+
f"UID={conf.username};"
17+
f"PWD={conf.password};"
18+
f"PORT={conf.port};"
19+
)
20+
21+
conn = None
22+
try:
23+
conn = pyodbc.connect(conn_str)
24+
print("Connect Success")
25+
return True
26+
except pyodbc.Error as e:
27+
print(f"Connect Fail:{e}")
28+
return False
29+
finally:
30+
if conn is not None:
31+
conn.close()
32+
33+
def create_ds(session: Session, ds: CoreDatasource):
34+
record = CoreDatasource(**ds.model_dump())
35+
record.create_time = datetime.datetime.now()
36+
record.status = "Success" # todo check status
37+
session.add(record)
38+
session.commit()
39+
return record
Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,23 @@
11
from sqlmodel import SQLModel, Field
22
from sqlalchemy import Column, Text, BigInteger, DateTime, Integer, Identity
33
from datetime import datetime
4+
from pydantic import BaseModel
45

5-
class core_datasource(SQLModel, table=True):
6+
class CoreDatasource(SQLModel, table=True):
7+
__tablename__ = "core_datasource"
68
id: int = Field(sa_column=Column(Integer, Identity(always=True), nullable=False, primary_key=True))
79
name: str = Field(max_length=128, nullable=False)
810
description: str = Field(max_length=512, nullable=True)
911
type: str = Field(max_length=64)
1012
configuration: str = Field(sa_column=Column(Text))
1113
create_time: datetime = Field(sa_column=Column(DateTime(timezone=True), nullable=True))
1214
create_by: int = Field(sa_column=Column(BigInteger()))
13-
status: str = Field(max_length=64, nullable=True)
15+
status: str = Field(max_length=64, nullable=True)
16+
17+
class DatasourceConf(BaseModel):
18+
host: str
19+
port: int
20+
username: str
21+
password: str
22+
database: str
23+
driver: str

0 commit comments

Comments
 (0)