Skip to content

Commit e4420a8

Browse files
committed
temp [ci skip];
1 parent 63aec83 commit e4420a8

2 files changed

Lines changed: 28 additions & 6 deletions

File tree

sqlmesh/lsp/api.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import typing as t
1111
from sqlmesh.utils.pydantic import PydanticModel
12+
from web.server.models import Model
1213

1314
API_FEATURE = "sqlmesh/api"
1415

@@ -28,7 +29,28 @@ class ApiRequest(PydanticModel):
2829
class ApiResponse(PydanticModel):
2930
"""
3031
Response from the SQLMesh API.
31-
This is a generic response that can be used to return data from any API endpoint.
32+
This is a generic base class that can be used to return data from any API endpoint.
33+
Specific API responses should inherit from this class and specify the data type more precisely.
3234
"""
3335

3436
data: t.Union[t.Dict[str, t.Any], t.List[t.Any]]
37+
38+
39+
class ApiResponseGetModels(ApiResponse):
40+
"""
41+
Response from the SQLMesh API for the get_models endpoint.
42+
Specifies the data type more precisely as a list of models.
43+
"""
44+
data: t.List[Model]
45+
46+
def __init__(self, **data):
47+
# Convert datetime objects to strings before passing to parent constructor
48+
if "data" in data and isinstance(data["data"], list):
49+
for model in data["data"]:
50+
if hasattr(model, "details") and model.details:
51+
# Convert datetime fields to None or string to avoid serialization issues
52+
for field in ["stamp", "start", "cron_prev", "cron_next"]:
53+
if hasattr(model.details, field) and getattr(model.details, field) is not None:
54+
setattr(model.details, field, None)
55+
56+
super().__init__(**data)

sqlmesh/lsp/main.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from sqlmesh._version import __version__
1212
from sqlmesh.core.context import Context
1313
from sqlmesh.core.linter.definition import AnnotatedRuleViolation
14-
from sqlmesh.lsp.api import API_FEATURE, ApiRequest, ApiResponse
14+
from sqlmesh.lsp.api import API_FEATURE, ApiRequest, ApiResponse, ApiResponseGetModels
1515
from sqlmesh.lsp.completions import get_sql_completions
1616
from sqlmesh.lsp.context import LSPContext
1717
from sqlmesh.lsp.custom import ALL_MODELS_FEATURE, AllModelsRequest, AllModelsResponse
@@ -53,13 +53,13 @@ def all_models(
5353
return get_sql_completions(None, params.textDocument.uri)
5454

5555
@self.server.feature(API_FEATURE)
56-
def api(ls: LanguageServer, request: ApiRequest) -> t.Dict[str, t.Any]:
56+
def api(ls: LanguageServer, request: ApiRequest) -> ApiResponse:
5757
if self.lsp_context is None:
5858
return ApiResponse(data={})
5959
if request.url == "/api/models":
60-
response = ApiResponse(data=get_models(self.lsp_context.context))
61-
return response.model_dump(mode='json')
62-
return ApiResponse(data={}).model_dump(mode='json')
60+
response = ApiResponseGetModels(data=get_models(self.lsp_context.context))
61+
return response
62+
return ApiResponse(data={})
6363

6464
@self.server.feature(types.TEXT_DOCUMENT_DID_OPEN)
6565
def did_open(

0 commit comments

Comments
 (0)