{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "ab7e3d33-adfa-4d89-9464-1d2a41673ff2", "metadata": { "tags": [] }, "outputs": [], "source": [ "" ] }, { "cell_type": "code", "execution_count": 10, "id": "8756d2a8-23a5-4fca-ab64-0fcd75f803f1", "metadata": { "tags": [] }, "outputs": [], "source": [ "from pydantic import BaseModel, Field, conint, model_validator, ValidationError\n", "from ipyautoui import AutoUi\n", "\n", "class ApertureSettings(BaseModel):\n", " radius : conint(ge=1) = Field(default=1)\n", " inner_annulus : conint(ge=1) = Field(default=2)\n", " outer_annulus : conint(ge=1) = Field(default=3)\n", "\n", " class Config:\n", " validate_assignment = True\n", " validate_default = True\n", "\n", " @model_validator(mode=\"after\")\n", " def check_annuli(cls, values):\n", " if values.inner_annulus >= values.outer_annulus:\n", " raise ValueError('inner_annulus must be smaller than outer_annulus')\n", " if values.radius >= values.inner_annulus:\n", " raise ValueError('radius must be smaller than inner_annulus')\n", " return values" ] }, { "cell_type": "code", "execution_count": 11, "id": "9af83a5b-4135-4b5f-9b62-0e3db0a26f35", "metadata": { "tags": [] }, "outputs": [], "source": [ "ui = AutoUi(ApertureSettings)\n", "\n", "counter = 0\n", "def my_observer(change):\n", " global counter\n", " counter += 1\n", " print(f\"My observer call {counter}\")\n", " print(ui.value)\n", " try: \n", " ApertureSettings(**ui.value)\n", " except ValidationError:\n", " print(\" Bad state\")\n", " else: \n", " print(\" Good state\")\n", "\n", "ui.observe(my_observer, names=\"_value\")" ] }, { "cell_type": "code", "execution_count": 12, "id": "168c263a-82d6-4a4e-be61-80c54b8c93cf", "metadata": { "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "169c319a72b341db90bb0edac681c0ae", "version_major": 2, "version_minor": 0 }, "text/plain": [ "AutoUi(children=(SaveButtonBar(children=(ToggleButton(value=False, button_style='success', disabled=True, icon…" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ui" ] }, { "cell_type": "code", "execution_count": 13, "id": "03c5000f-de18-407a-94a8-05f380bf834c", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "My observer call 1\n", "{'radius': 2, 'inner_annulus': 7, 'outer_annulus': 8}\n", " Good state\n" ] } ], "source": [ "ui.value = dict(radius=2, inner_annulus=7, outer_annulus=8)" ] }, { "cell_type": "code", "execution_count": null, "id": "2a91ab8d-0bcb-4cce-87d6-7b89877cc29c", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.17" } }, "nbformat": 4, "nbformat_minor": 5 }