from ipyautoui.custom.editgrid import EditGrid
from ipyautoui.custom.edittsv import EditTsvFileUpload
import typing as ty
from pydantic import BaseModel, Field, RootModel
from ipyautoui import AutoUi
class DataFrameCols(BaseModel):
string: str = Field("string", json_schema_extra=dict(column_width=100, name="string"))
integer: int = Field(1, json_schema_extra=dict(column_width=80, name="integer"))
floater: float = Field(3.1415, json_schema_extra=dict(column_width=70, global_decimal_places=3, name="floater"))
something_else: float = Field(324, json_schema_extra=dict(column_width=100, name="something_else"))
class TestDataFrame(RootModel):
"""a description of TestDataFrame"""
root: ty.List[DataFrameCols] = Field(json_schema_extra=dict(format="dataframe", datagrid_index_name=("name", )))
egrid = EditGrid(schema=TestDataFrame, show_ui_io=True, ui_io=EditTsvFileUpload)
egridEditGrid
egrid = AutoUi(schema=TestDataFrame)
egridegrid.value = [
{
"string": "important string",
"integer": 1,
"floater": 3.14,
"something_else": 324,
},
{"string": "update", "integer": 4, "floater": 3.12344, "something_else": 123},
{"string": "evening", "integer": 5, "floater": 3.14, "something_else": 235},
{"string": "morning", "integer": 5, "floater": 3.14, "something_else": 12},
{"string": "number", "integer": 3, "floater": 3.14, "something_else": 123},
]from pydantic import RootModel
# Test: EditGrid instance with multi-indexing.
AUTO_GRID_DEFAULT_VALUE = [
{
"string": "important string",
"integer": 1,
"floater": 3.14,
},
]
AUTO_GRID_DEFAULT_VALUE = AUTO_GRID_DEFAULT_VALUE * 4
AUTO_GRID_DEFAULT_VALUE = AUTO_GRID_DEFAULT_VALUE + [
{
"string": None,
"integer": None,
"floater": None,
},
]
class DataFrameCols(BaseModel):
string: ty.Optional[str] = Field(
"string", json_schema_extra=dict(column_width=400, section="a")
)
integer: ty.Optional[int] = Field(
1, json_schema_extra=dict(column_width=80, section="a")
)
floater: ty.Optional[float] = Field(
None, json_schema_extra=dict(column_width=70, section="b")
)
class TestDataFrame(RootModel):
"""a description of TestDataFrame"""
root: ty.List[DataFrameCols] = Field(
default=AUTO_GRID_DEFAULT_VALUE,
json_schema_extra=dict(
format="dataframe", datagrid_index_name=("section", "title")
),
)
title = "The Wonderful Edit Grid Application"
description = "Useful for all editing purposes whatever they may be 👍"
editgrid = EditGrid(
schema=TestDataFrame,
title=title,
description=description,
ui_add=None,
ui_edit=None,
warn_on_delete=True,
show_copy_dialogue=False,
close_crud_dialogue_on_action=False,
global_decimal_places=1,
column_width={"String": 400},
)
editgrid.observe(lambda c: print("_value changed"), "_value")
display(editgrid)class TestProperties(BaseModel):
string: str
nullable_string: ty.Optional[str] = None
floater: float = 1.5
inty: int = 1
class TestGridSchema(RootModel):
"""no default"""
root: ty.List[TestProperties] = Field(
[TestProperties(string="string").model_dump()],
)
egrid = EditGrid(
schema=TestGridSchema,
value=[{"string": "test2","nullable_string":None, "floater": 2.2, "inty": 1}],
)
egrideg = EditGrid(schema=None)
egeg.ui_editeg.row_schema{'properties': {}}
eg.update_from_schema(TestGridSchema)