0

How do I write a validator that checks whether a record has a single action?

I tried the following

class MouseAction(SQLModel):
    user_id: int = Field(foreign_key=user.id)

    blur: int = Field(default=0)
    focus: int = Field(default=0)
    copy_: int = Field(alias='copy', default=0)
    paste: int = Field(default=0)
    left_click: int = Field(default=0)
    right_click: int = Field(default=0)
    double_click: int = Field(default=0)

    @validator('blur', 'focus', 'copy_', 'paste', 'left_click', 'right_click', 'double_click')
    def check_has_action(cls, v, values, **kwargs):
        if sum(values) > 1:
            raise ValueError('Only a single action is allowed per record')
        elif sum(values) < 1:
            raise ValueError('Record must have an action/ event')
        return values
HALLOWEEN
  • 3
  • 4

1 Answers1

0

Consider using an enum instead:

import enum

from sqlmodel import Column, Enum, Field, SQLModel


class MouseActionType(enum.Enum):
    BLUR = "blur"
    FOCUS = "focus"
    COPY = "copy"
    PASTE = "paste"
    LEFT_CLICK = "left_click"
    RIGHT_CLICK = "right_click"
    DOUBLE_CLICK = "double_click"


class MouseAction(SQLModel):
    user_id: int = Field(foreign_key="user.id")
    mouse_action_type: MouseActionType = Field(sa_column=Column(Enum(MouseActionType)))
Paweł Rubin
  • 2,030
  • 1
  • 14
  • 25