"""ORM models for function type tables (PythonFunction, MemberFunction, ShellFunction)."""
from pydantic import BaseModel
from sqlalchemy import ForeignKey, String, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column
from .. import models
from .base import Base
[docs]
class PythonFunctionTable(Base):
__tablename__ = "python_function"
__table_args__ = (UniqueConstraint("name", "module_", name="uq_python_function_name_module"),)
[docs]
id_: Mapped[int] = mapped_column(primary_key=True)
[docs]
name: Mapped[str] = mapped_column(String(255), index=True)
[docs]
module_: Mapped[str] = mapped_column(String(512))
@classmethod
[docs]
def pydantic_create_class(cls) -> type[BaseModel]:
return models.PythonFunctionCreate
@classmethod
[docs]
def pydantic_model_class(cls) -> type[BaseModel]:
return models.PythonFunction
@classmethod
[docs]
def class_string(cls) -> str:
return cls.__tablename__
[docs]
class MemberFunctionTable(Base):
__tablename__ = "member_function"
[docs]
id_: Mapped[int] = mapped_column(primary_key=True)
[docs]
name: Mapped[str] = mapped_column(String(255), index=True)
[docs]
class_id: Mapped[int] = mapped_column(ForeignKey("class.id_"), index=True)
@classmethod
[docs]
def pydantic_create_class(cls) -> type[BaseModel]:
return models.MemberFunctionCreate
@classmethod
[docs]
def pydantic_model_class(cls) -> type[BaseModel]:
return models.MemberFunction
@classmethod
[docs]
def class_string(cls) -> str:
return cls.__tablename__
[docs]
class ShellFunctionTable(Base):
__tablename__ = "shell_function"
[docs]
id_: Mapped[int] = mapped_column(primary_key=True)
[docs]
name: Mapped[str] = mapped_column(String(255), index=True, unique=True)
@classmethod
[docs]
def pydantic_create_class(cls) -> type[BaseModel]:
return models.ShellFunctionCreate
@classmethod
[docs]
def pydantic_model_class(cls) -> type[BaseModel]:
return models.ShellFunction
@classmethod
[docs]
def class_string(cls) -> str:
return cls.__tablename__