Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 13 additions & 187 deletions api/views/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,6 @@
FViewScope,
FViewVisibility,
FViewWorking,
ListsSettings,
OverviewSettings,
ReviewsSettings,
TaskProgressSettings,
VersionsSettings,
ViewSettingsModel,
)

#
Expand Down Expand Up @@ -44,156 +38,36 @@ class ViewListModel(OPModel):
# GET REST API models
#


class BaseViewModel(ViewListItemModel):
settings: ViewSettingsModel
access: dict[str, Any]


class OverviewViewModel(BaseViewModel):
"""Overview view model."""

view_type: Literal["overview"] = "overview"
settings: OverviewSettings


class TaskProgressViewModel(BaseViewModel):
"""Task progress view model."""

view_type: Literal["taskProgress"] = "taskProgress"
settings: TaskProgressSettings


class ListsViewModel(BaseViewModel):
"""Lists view model."""

view_type: Literal["lists"] = "lists"
settings: ListsSettings


class ReviewsViewModel(BaseViewModel):
"""Reviews view model."""

view_type: Literal["reviews"] = "reviews"
settings: ReviewsSettings


class VersionsViewModel(BaseViewModel):
"""Versions view model."""

view_type: Literal["versions"] = "versions"
settings: VersionsSettings


class GenericViewModel(BaseViewModel):
class GenericViewModel(ViewListItemModel):
"""Reports view model."""

view_type: str
settings: dict[str, Any]
access: dict[str, Any]


#
# POST REST API models
#


class BaseViewPostModel(OPModel):
class GenericViewPostModel(OPModel):
id: FViewId
label: FViewLabel
working: FViewWorking = True
settings: ViewSettingsModel


class OverviewViewPostModel(BaseViewPostModel):
"""Overview view post model."""

view_type: Literal["overview"] = "overview"
settings: OverviewSettings


class TaskProgressViewPostModel(BaseViewPostModel):
"""Task progress view post model."""

view_type: Literal["taskProgress"] = "taskProgress"
settings: TaskProgressSettings


class ListsViewPostModel(BaseViewPostModel):
"""Lists view post model."""

view_type: Literal["lists"] = "lists"
settings: ListsSettings


class ReviewsViewPostModel(BaseViewPostModel):
"""Reviews view post model."""

view_type: Literal["reviews"] = "reviews"
settings: ReviewsSettings


class VersionsViewPostModel(BaseViewPostModel):
"""Versions view post model."""

view_type: Literal["versions"] = "versions"
settings: VersionsSettings


class GenericViewPostModel(BaseViewPostModel):
view_type: str
view_type: str | None = None
settings: dict[str, Any]


#
# Patch REST API models
#


class BaseViewPatchModel(OPModel):
class GenericViewPatchModel(OPModel):
"""Reports view post model."""
label: FViewLabel | None = None
owner: FViewOwner | None = None
settings: ViewSettingsModel | None = None


class OverviewViewPatchModel(BaseViewPatchModel):
"""Overview view post model."""

view_type: Literal["overview"] = "overview"
settings: OverviewSettings | None = None


class TaskProgressViewPatchModel(BaseViewPatchModel):
"""Task progress view post model."""

view_type: Literal["taskProgress"] = "taskProgress"
settings: TaskProgressSettings | None = None


class ListsViewPatchModel(BaseViewPatchModel):
"""Lists view post model."""

view_type: Literal["lists"] = "lists"
settings: ListsSettings | None = None


class ReviewsViewPatchModel(BaseViewPatchModel):
"""Reviews view post model."""

view_type: Literal["reviews"] = "reviews"
settings: ReviewsSettings | None = None


class VersionsViewPatchModel(BaseViewPatchModel):
"""Versions view post model."""

view_type: Literal["versions"] = "versions"
settings: VersionsSettings | None = None


class GenericViewPatchModel(BaseViewPatchModel):
"""Reports view post model."""

view_type: str
view_type: str | None = None
settings: dict[str, Any] | None = None


Expand All @@ -203,87 +77,39 @@ class GenericViewPatchModel(BaseViewPatchModel):


ViewModel = Annotated[
OverviewViewModel
| TaskProgressViewModel
| ListsViewModel
| ReviewsViewModel
| VersionsViewModel
| GenericViewModel,
GenericViewModel,
Field(
discriminator="view_type",
title="View model",
),
]

ViewPostModel = Annotated[
OverviewViewPostModel
| TaskProgressViewPostModel
| ListsViewPostModel
| ReviewsViewPostModel
| VersionsViewPostModel
| GenericViewPostModel,
GenericViewPostModel,
Field(
discriminator="view_type",
title="View post model",
),
]
Comment thread
kalisp marked this conversation as resolved.
Outdated

ViewPatchModel = Annotated[
OverviewViewPatchModel
| TaskProgressViewPatchModel
| ListsViewPatchModel
| ReviewsViewPatchModel
| VersionsViewPatchModel
| GenericViewPatchModel,
GenericViewPatchModel,
Field(
discriminator="view_type",
title="View model",
),
]
ViewPatchModel = GenericViewPatchModel
Comment thread
github-code-quality[bot] marked this conversation as resolved.
Fixed


def construct_view_model(**data: Any) -> ViewModel:
if data.get("view_type") == "overview":
return OverviewViewModel(**data)
elif data.get("view_type") == "taskProgress":
return TaskProgressViewModel(**data)
elif data.get("view_type") == "lists":
return ListsViewModel(**data)
elif data.get("view_type") == "reviews":
return ReviewsViewModel(**data)
elif data.get("view_type") == "versions":
return VersionsViewModel(**data)
else:
return GenericViewModel(**data)


def get_post_model_class(view_type: str) -> type[ViewPostModel]:
if view_type == "overview":
return OverviewViewPostModel
elif view_type == "taskProgress":
return TaskProgressViewPostModel
elif view_type == "lists":
return ListsViewPostModel
elif view_type == "reviews":
return ReviewsViewPostModel
elif view_type == "versions":
return VersionsViewPostModel
else:
def get_post_model_class() -> type[ViewPostModel]:
return GenericViewPostModel


def get_patch_model_class(view_type: str) -> type[ViewPatchModel]:
if view_type == "overview":
return OverviewViewPatchModel
elif view_type == "taskProgress":
return TaskProgressViewPatchModel
elif view_type == "lists":
return ListsViewPatchModel
elif view_type == "reviews":
return ReviewsViewPatchModel
elif view_type == "versions":
return VersionsViewPatchModel
else:
def get_patch_model_class() -> type[ViewPatchModel]:
return GenericViewPatchModel


Expand Down
8 changes: 4 additions & 4 deletions api/views/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ async def create_view(
request: Request,
current_user: CurrentUser,
view_type: PViewType,
payload: ViewPostModel,
payload: Annotated[ViewPostModel, Body(title="Payload")],
project_name: QProjectName = None,
) -> EntityIdResponse:
"""Create a new view for current user."""
Expand All @@ -282,7 +282,7 @@ async def create_view(
raise ForbiddenException("The '__base__' view label is reserved.")

_json = await request.json()
payload_class = get_post_model_class(view_type)
payload_class = get_post_model_class()
if "view_type" not in _json:
_json["view_type"] = view_type
payload = payload_class(**_json)
Expand Down Expand Up @@ -333,15 +333,15 @@ async def update_view(
user: CurrentUser,
view_type: PViewType,
view_id: PViewId,
payload: ViewPatchModel,
payload: Annotated[ViewPatchModel, Body(title="Payload")],
project_name: QProjectName = None,
) -> None:
"""Update a view in the database."""

_json = await request.json()
if "view_type" not in _json:
_json["view_type"] = view_type
payload_class = get_patch_model_class(view_type)
payload_class = get_patch_model_class()
payload = payload_class(**_json)

if payload.label == "__base__":
Expand Down
65 changes: 0 additions & 65 deletions ayon_server/views/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

from pydantic import Field

from ayon_server.sqlfilter import QueryFilter
from ayon_server.types import OPModel
from ayon_server.utils import create_uuid

Expand Down Expand Up @@ -118,67 +117,3 @@ class ColumnItemModel(OPModel):
],
),
]


#
# Per-page models
#


class OverviewSettings(OPModel):
show_hierarchy: bool = True
row_height: int | None = None
group_by: str | None = None
group_sort_by_desc: bool = False
show_empty_groups: bool = False
sort_by: str | None = None
sort_desc: bool = False
filter: QueryFilter | None = None
folder_filter: QueryFilter | None = None
slice_type: str | None = None
columns: FColumnList


class TaskProgressSettings(OPModel):
filter: QueryFilter | None = None
slice_type: str | None = None
columns: FColumnList


class ListsSettings(OPModel):
row_height: int | None = None
sort_by: str | None = None
sort_desc: bool = False
filter: QueryFilter | None = None
columns: FColumnList


class ReviewsSettings(ListsSettings):
grid_height: int | None = None
display_style: FDisplayStyle = None


class VersionsSettings(OPModel):
show_products: bool = False
row_height: int | None = None
show_grid: bool = True
grid_height: int | None = None
featured_version_order: list[str] | None = None
slicer_type: str | None = None
group_by: str | None = None
group_sort_by_desc: bool = False
show_empty_groups: bool = False
sort_by: str | None = None
sort_desc: bool = False
filter: QueryFilter | None = None
columns: FColumnList


ViewSettingsModel = (
OverviewSettings
| TaskProgressSettings
| ListsSettings
| VersionsSettings
| ReviewsSettings
| dict[str, Any]
)