holoviz / param

Param: Make your Python code clearer and more reliable by declaring Parameters
https://param.holoviz.org
BSD 3-Clause "New" or "Revised" License
412 stars 69 forks source link

Automatically serialize dataclass / pydantic models into `param.Parameterized`? #809

Open ahuang11 opened 11 months ago

ahuang11 commented 11 months ago

I was wondering whether we can (or if it's useful to) convert dataclass/pydantic models into param.Parameterized classes?

from dataclasses import dataclass
import param
import panel as pn

@dataclass
class User():
    name: str
    avatar: str

@dataclass
class Message():

    text: str

class UserRow(pn.widgets.CompositeWidget):
    user = param.ClassSelector(class_=User, doc="The user to display.")
    message = param.ClassSelector(class_=Message, doc="The message to display.")

    _composite_type = pn.Row

    def __init__(self, **params):
        super().__init__(**params)
        name = self.user.name
        avatar = self.user.avatar
        self._composite[:] = [
            pn.pane.HTML(avatar),
            pn.Column(
                pn.pane.Markdown(f"**{name}**"),
                pn.pane.Markdown(self.message.text),
            )
        ]

UserRow(user=User(name="Andrew", avatar="A"), message=Message(text="Hello!"))
MarcSkovMadsen commented 11 months ago

There is already a repository/ Project trying to do this.

I also started working in this in One of my branches of the Project Paithon.