|
1 | | -from typing import List |
2 | 1 | from functools import singledispatch |
3 | 2 | from contextlib import suppress |
4 | 3 | import pandas as pd |
| 4 | +import pydantic |
5 | 5 |
|
6 | 6 | from ..prototype import vetiver_create_prototype |
7 | 7 | from ..meta import VetiverMeta |
@@ -119,30 +119,34 @@ def handler_startup(): |
119 | 119 | """ |
120 | 120 | ... |
121 | 121 |
|
| 122 | + @singledispatch |
122 | 123 | def _prepare_data(self, pred_data) -> pd.DataFrame: |
123 | 124 | """Convert prototype to dataframe data |
124 | 125 |
|
125 | 126 | Parameters |
126 | 127 | ---------- |
127 | | - prototype_data : pd.DataFrame, np.ndarray, or None |
128 | | - Training data to create prototype |
| 128 | + pred_data : pydantic.BaseModel |
| 129 | + User data from given to API endpoint |
129 | 130 |
|
130 | 131 | Returns |
131 | 132 | ------- |
132 | | - prototype : pd.DataFrame or None |
133 | | - Zero-row DataFrame for storing data types |
134 | | - """ |
135 | | - if isinstance(pred_data, List): |
136 | | - columns = pred_data[0].dict().keys() |
137 | | - data = [line.dict() for line in pred_data] |
138 | | - served_data = pd.DataFrame(data, columns=columns) |
139 | | - else: |
140 | | - served_data = [] |
141 | | - for key, value in pred_data: |
142 | | - served_data.append(value) |
| 133 | + pd.DataFrame |
| 134 | + BaseModel data translated into DataFrame |
| 135 | + """ |
| 136 | + served_data = [] |
| 137 | + for key, value in pred_data: |
| 138 | + served_data.append(value) |
143 | 139 |
|
144 | 140 | return served_data |
145 | 141 |
|
| 142 | + @_prepare_data.register |
| 143 | + def _basemodel(self, pred_data: pydantic.BaseModel): |
| 144 | + return pd.DataFrame([dict(s) for s in pred_data]) |
| 145 | + |
| 146 | + @_prepare_data.register |
| 147 | + def _list(self, pred_data: list): |
| 148 | + return pd.DataFrame([dict(s) for s in pred_data]) |
| 149 | + |
146 | 150 | def handler_predict(self, input_data, check_prototype): |
147 | 151 | """Generates method for /predict endpoint in VetiverAPI |
148 | 152 |
|
|
0 commit comments