Skip to content

Commit

Permalink
fix: typing and conversion for fastapi/pydantic
Browse files Browse the repository at this point in the history
  • Loading branch information
maartenbreddels committed Jul 10, 2023
1 parent 3b79d90 commit f97a3fb
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions packages/vaex-server/vaex/server/fastapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ class HistogramInput(BaseModel):
shape: int = 128
min: Optional[Union[float, int, str]] = None
max: Optional[Union[float, int, str]] = None
filter: str = None
virtual_columns: Dict[str, str] = None
filter: Optional[str] = None
virtual_columns: Optional[Dict[str, str]] = None


class HistogramOutput(BaseModel):
Expand All @@ -68,8 +68,8 @@ class HeatmapInput(BaseModel):
max_x: Optional[Union[float, int, str]] = None
min_y: Optional[Union[float, int, str]] = None
max_y: Optional[Union[float, int, str]] = None
filter: str = None
virtual_columns: Dict[str, str] = None
filter: Optional[str] = None
virtual_columns: Optional[Dict[str, str]] = None


class HeatmapOutput(BaseModel):
Expand Down Expand Up @@ -139,9 +139,17 @@ def get_df(name):
yield vaex.from_dataset(datasets[name])


def _number(v):
if v is None:
return v
try:
return float(v)
except:
return v

async def _compute_histogram(input: HistogramInput) -> HistogramOutput:
with get_df(input.dataset_id) as df:
limits = [input.min, input.max]
limits = [_number(input.min), _number(input.max)]
limits = df.limits(input.expression, limits, delay=True)
await df.execute_async()
limits = await limits
Expand Down Expand Up @@ -185,8 +193,8 @@ async def histogram_plot(input: HistogramInput = Depends(HistogramInput)) -> His

async def _compute_heatmap(input: HeatmapInput) -> HeatmapOutput:
with get_df(input.dataset_id) as df:
limits_x = [input.min_x, input.max_x]
limits_y = [input.min_y, input.max_y]
limits_x = [_number(input.min_x), _number(input.max_x)]
limits_y = [_number(input.min_y), _number(input.max_y)]
limits_x = df.limits(input.expression_x, limits_x, delay=True)
limits_y = df.limits(input.expression_y, limits_y, delay=True)
await df.execute_async()
Expand Down

0 comments on commit f97a3fb

Please sign in to comment.