Skip to content

Commit 7b946a0

Browse files
Merge pull request #388 from maxfordham/set-by_alias-as-false-by-default
Set by_alias to false by default
2 parents 3244a2a + 4273386 commit 7b946a0

7 files changed

Lines changed: 20 additions & 33 deletions

File tree

src/ipyautoui/automapschema.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,6 @@ def _init_model_schema(
9191
return model, schema
9292

9393

94-
def pydantic_validate(model, value):
95-
return model.model_validate(value).model_dump(mode="json")
96-
97-
9894
def is_allowed_type(di: dict) -> bool:
9995
# https://json-schema.org/understanding-json-schema/reference/combining.html
10096
if "anyOf" in di:

src/ipyautoui/autoui.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,7 @@
3535
get_widgets_map,
3636
get_containers_map,
3737
map_widget,
38-
widgetcaller,
3938
_init_model_schema,
40-
pydantic_validate,
4139
)
4240

4341
logger = logging.getLogger(__name__)

src/ipyautoui/custom/autogrid.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@
66
defines AutoGrid, a datagrid generated from a jsonschema."""
77

88
import typing as ty
9-
from copy import deepcopy
109
import logging
1110
import pandas as pd
1211

1312
import traitlets as tr
1413
from pydantic import BaseModel, Field
15-
from ipydatagrid import CellRenderer, DataGrid, TextRenderer, VegaExpr
16-
from ipydatagrid.datagrid import SelectionHelper
14+
from ipydatagrid import CellRenderer, TextRenderer
1715

1816
from ipyautoui.custom.datagrid import DataGrid
1917
import ipyautoui.automapschema as asch
@@ -60,7 +58,7 @@ def get_default_row_data_from_schema_properties(
6058
Returns:
6159
dict: dictionary column values
6260
"""
63-
get = lambda k, v: v["default"] if "default" in v.keys() else None
61+
def get(k, v): return v["default"] if "default" in v.keys() else None
6462
di = {k: get(k, v) for k, v in properties.items()}
6563
return {k: v for k, v in di.items()}
6664

@@ -131,7 +129,7 @@ def get_global_renderer_from_schema(
131129
if renderer_name in kwargs:
132130
return kwargs[renderer_name]
133131

134-
get_from_schema = lambda r, schema: schema[r] if r in schema.keys() else None
132+
def get_from_schema(r, schema): return schema[r] if r in schema.keys() else None
135133
_ = get_from_schema(renderer_name, schema)
136134

137135
if _ is not None:
@@ -144,7 +142,7 @@ def get_global_renderers_from_schema(schema, **kwargs) -> dict:
144142
li_renderers = ["default_renderer", "header_renderer", "corner_renderer"]
145143
# ^ globally specified ipydatagrid renderers
146144
renderers = {
147-
l: get_global_renderer_from_schema(schema, l, **kwargs) for l in li_renderers
145+
x: get_global_renderer_from_schema(schema, x, **kwargs) for x in li_renderers
148146
}
149147
return {k: v for k, v in renderers.items() if v is not None}
150148

src/ipyautoui/custom/datagrid.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
import logging
2-
from copy import deepcopy
3-
4-
import pandas as pd
52
import traitlets as tr
6-
7-
from ipydatagrid import CellRenderer, DataGrid, TextRenderer, VegaExpr
8-
from ipydatagrid.datagrid import SelectionHelper
3+
from ipydatagrid import DataGrid, VegaExpr
94

105

116
class DataGrid(DataGrid):

src/ipyautoui/custom/editgrid.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ def __init__(
328328
# self.show_copy_dialogue = show_copy_dialogue
329329
self.show_copy_dialogue = False
330330
# ^ TODO: delete this when that functionality is added
331-
self._set_children_editgrid()
331+
self._set_children()
332332
self._set_datahandler(datahandler=datahandler)
333333
self._update_value_from_grid()
334334

@@ -344,19 +344,17 @@ def update_from_schema(
344344
ui_io: ty.Optional[ty.Callable] = None,
345345
**kwargs,
346346
):
347-
getvalue = lambda value: (
348-
None if value is None or value == [{}] else pd.DataFrame(value)
349-
)
347+
value = None if value is None or value == [{}] else pd.DataFrame(value)
350348
self.grid.update_from_schema(
351-
schema, data=getvalue(value), by_alias=self.by_alias, generate_pydantic_model_from_json_schema=self.generate_pydantic_model_from_json_schema, **kwargs
349+
schema, data=value, by_alias=self.by_alias, generate_pydantic_model_from_json_schema=self.generate_pydantic_model_from_json_schema, **kwargs
352350
)
353351
self._init_ui_callables(
354352
ui_add=ui_add, ui_edit=ui_edit, ui_delete=ui_delete, ui_copy=ui_copy, ui_io=ui_io
355353
)
356354
self._init_ui_io(ui_io=ui_io)
357355
self._init_row_controls()
358356
self._init_controls()
359-
self._set_children_editgrid()
357+
self._set_children()
360358
self._set_datahandler(datahandler=datahandler)
361359

362360
def _init_autogrid(
@@ -408,7 +406,7 @@ def _factory():
408406
if self.model is None:
409407
return _missing_model_ui()
410408
return EditTsvWithDiff(
411-
model=self.model, fn_upload=self.fn_upload, transposed=self.transposed
409+
model=self.model, fn_upload=self.fn_upload, transposed=self.transposed, by_alias = self.by_alias
412410
)
413411
self._ui_io_factory = _factory
414412
else:
@@ -417,7 +415,7 @@ def _factory_custom():
417415
return _missing_model_ui()
418416
try:
419417
return ui_io(
420-
model=self.model, fn_upload=self.fn_upload, transposed=self.transposed
418+
model=self.model, fn_upload=self.fn_upload, transposed=self.transposed, by_alias = self.by_alias
421419
)
422420
except Exception as e:
423421
raise RuntimeError(
@@ -432,7 +430,7 @@ def _factory_custom():
432430
def _init_ui_io(self, ui_io):
433431
if ui_io is not None and self.ui_io_initialised:
434432
self.ui_io = ui_io(
435-
model=self.model, fn_upload=self.fn_upload, transposed=self.transposed
433+
model=self.model, fn_upload=self.fn_upload, transposed=self.transposed, by_alias = self.by_alias
436434
)
437435

438436
def _ensure_ui_io_initialised(self):
@@ -445,7 +443,7 @@ def _ensure_ui_io_initialised(self):
445443
self.ui_io = self._ui_io_factory()
446444
if hasattr(self.ui_io, "traits") and "transposed" in self.ui_io.traits():
447445
self.ui_io.transposed = self.transposed
448-
self._set_children_editgrid()
446+
self._set_children()
449447
return self.ui_io
450448

451449
def fn_upload(self, value):
@@ -492,7 +490,7 @@ def _set_datahandler(self, datahandler):
492490
if self.datahandler is not None:
493491
self.buttonbar_grid.fn_reload = self._reload_datahandler
494492

495-
def _set_children_editgrid(self):
493+
def _set_children(self):
496494
self.vbx_widget.children = [self.buttonbar_grid, self.stk_crud, self.grid]
497495

498496
# Base CRUD UIs

src/ipyautoui/custom/edittsv.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import typing as ty
1818
import xlsxdatagrid as xdg
1919
from pathlib import Path
20+
from ipyautoui.watch_validate import pydantic_validate
2021

2122
from ipyautoui.constants import BUTTON_WIDTH_MIN
2223

@@ -132,6 +133,7 @@ def default_fn_upload(value):
132133
class EditTsv(CopyToClipboard):
133134
_value = tr.List(value=None, trait=tr.Dict, allow_none=True)
134135
model = tr.Type(klass=BaseModel)
136+
by_alias = tr.Bool(default_value=False)
135137
errors = tr.List(value=[], trait=tr.Dict)
136138
fn_upload = tr.Callable(default_value=default_fn_upload)
137139
upload_status = tr.Enum(
@@ -213,7 +215,7 @@ def value(self):
213215

214216
@value.setter
215217
def value(self, value):
216-
data = self.model.model_validate(value).model_dump(mode="json", by_alias=True) if value else []
218+
data = pydantic_validate(self.model, value, by_alias=self.by_alias) if value else []
217219
self._value = data
218220
self.text.value = self.get_tsv_data()
219221

@@ -453,7 +455,7 @@ def value(self):
453455

454456
@value.setter
455457
def value(self, value):
456-
data = self.model.model_validate(value).model_dump(mode="json", by_alias=True) if value else []
458+
data = pydantic_validate(self.model, value, by_alias=self.by_alias) if value else []
457459
self._value = data
458460
"""Code added to trigger manual validation if needed (text new value is same as previous text value - In that case,text obsever fn won't be triggered automatically)"""
459461
trigger_manual_validation = False

src/ipyautoui/watch_validate.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
logger = logging.getLogger(__name__)
1212

1313

14-
def pydantic_validate(model: BaseModel, value):
15-
return model.model_validate(value).model_dump(mode="json", by_alias=True)
14+
def pydantic_validate(model: BaseModel, value, by_alias: bool = False, mode:str="json"):
15+
return model.model_validate(value).model_dump(mode=mode, by_alias=by_alias)
1616

1717

1818
class _WatchSilent(tr.HasTraits): # TODO: contains context manager for silencing traits

0 commit comments

Comments
 (0)