|
6 | 6 |
|
7 | 7 | from pydatalab import __version__
|
8 | 8 | from pydatalab.logger import LOGGER
|
| 9 | +from pydatalab.models.blocks import DataBlockResponse |
9 | 10 |
|
10 | 11 | __all__ = ("generate_random_id", "DataBlock", "generate_js_callback_single_float_parameter")
|
11 | 12 |
|
@@ -100,6 +101,8 @@ def generate_random_id():
|
100 | 101 | class DataBlock:
|
101 | 102 | """Base class for a data block."""
|
102 | 103 |
|
| 104 | + block_db_model = DataBlockResponse |
| 105 | + |
103 | 106 | name: str = "base"
|
104 | 107 | """The human-readable block name specifying which technique
|
105 | 108 | or file format it pertains to.
|
@@ -194,12 +197,9 @@ def __init__(
|
194 | 197 | def to_db(self):
|
195 | 198 | """returns a dictionary with the data for this
|
196 | 199 | block, ready to be input into mongodb"""
|
197 |
| - from bson import ObjectId |
198 | 200 |
|
199 | 201 | LOGGER.debug("Casting block %s to database object.", self.__class__.__name__)
|
200 |
| - dct_for_db = {k: v for k, v in self.data.items() if k != "bokeh_plot_data"} |
201 |
| - dct_for_db["file_id"] = ObjectId(dct_for_db["file_id"]) if "file_id" in dct_for_db else None |
202 |
| - return dct_for_db |
| 202 | + return self.block_db_model(**self.data).dict(exclude_unset=True) |
203 | 203 |
|
204 | 204 | @classmethod
|
205 | 205 | def from_db(cls, block: dict):
|
@@ -339,6 +339,6 @@ def update_from_web(self, data: dict):
|
339 | 339 | "Updating block %s from web request",
|
340 | 340 | self.__class__.__name__,
|
341 | 341 | )
|
342 |
| - self.data.update(data) |
| 342 | + self.data.update(self.block_db_model(**data).dict(exclude={}, exclude_unset=True)) |
343 | 343 |
|
344 | 344 | return self
|
0 commit comments