forked from enviPath/enviPy
The scenarios lists both in /scenarios and /package/<id>/scenario no longer show related scenarios (children).
All related scenarios are shown on the scenario page under Related Scenarios if there are any.
<img width="500" alt="{C2D38DED-A402-4A27-A241-BC2302C62A50}.png" src="attachments/1371c177-220c-42d5-94ff-56f9fbab761f">
Co-authored-by: Tim Lorsbach <tim@lorsba.ch>
Reviewed-on: enviPath/enviPy#323
Co-authored-by: Liam Brydon <lbry121@aucklanduni.ac.nz>
Co-committed-by: Liam Brydon <lbry121@aucklanduni.ac.nz>
135 lines
3.1 KiB
Python
135 lines
3.1 KiB
Python
from ninja import FilterSchema, FilterLookup, Schema
|
|
from typing import Annotated, Optional, List, Dict, Any
|
|
from uuid import UUID
|
|
|
|
|
|
# Filter schema for query parameters
|
|
class ReviewStatusFilter(FilterSchema):
|
|
"""Filter schema for review_status query parameter."""
|
|
|
|
review_status: Annotated[Optional[bool], FilterLookup("package__reviewed")] = None
|
|
|
|
|
|
class SelfReviewStatusFilter(FilterSchema):
|
|
"""Filter schema for review_status query parameter on self-reviewed entities."""
|
|
|
|
review_status: Annotated[Optional[bool], FilterLookup("reviewed")] = None
|
|
|
|
|
|
class StructureReviewStatusFilter(FilterSchema):
|
|
"""Filter schema for review_status on structures (via compound->package)."""
|
|
|
|
review_status: Annotated[Optional[bool], FilterLookup("compound__package__reviewed")] = None
|
|
|
|
|
|
class ScenarioReviewStatusAndRelatedFilter(ReviewStatusFilter):
|
|
"""Filter schema for review_status and parent query parameter."""
|
|
|
|
exclude_related: Annotated[Optional[bool], FilterLookup("parent__isnull")] = None
|
|
|
|
|
|
# Base schema for all package-scoped entities
|
|
class PackageEntityOutSchema(Schema):
|
|
"""Base schema for entities belonging to a package."""
|
|
|
|
uuid: UUID
|
|
url: str = ""
|
|
name: str
|
|
description: str
|
|
review_status: str = ""
|
|
package: str = ""
|
|
|
|
@staticmethod
|
|
def resolve_url(obj):
|
|
return obj.url
|
|
|
|
@staticmethod
|
|
def resolve_package(obj):
|
|
return obj.package.url
|
|
|
|
@staticmethod
|
|
def resolve_review_status(obj):
|
|
return "reviewed" if obj.package.reviewed else "unreviewed"
|
|
|
|
|
|
# All package-scoped entities inherit from base
|
|
class ScenarioOutSchema(PackageEntityOutSchema):
|
|
pass
|
|
|
|
|
|
class AdditionalInformationItemSchema(Schema):
|
|
"""Schema for additional information item in scenario creation."""
|
|
|
|
type: str
|
|
data: Dict[str, Any]
|
|
|
|
|
|
class ScenarioCreateSchema(Schema):
|
|
"""Schema for creating a new scenario."""
|
|
|
|
name: str
|
|
description: str = ""
|
|
scenario_date: str = "No date"
|
|
scenario_type: str = "Not specified"
|
|
additional_information: List[AdditionalInformationItemSchema] = []
|
|
|
|
|
|
class CompoundOutSchema(PackageEntityOutSchema):
|
|
pass
|
|
|
|
|
|
class RuleOutSchema(PackageEntityOutSchema):
|
|
pass
|
|
|
|
|
|
class ReactionOutSchema(PackageEntityOutSchema):
|
|
pass
|
|
|
|
|
|
class PathwayOutSchema(PackageEntityOutSchema):
|
|
pass
|
|
|
|
|
|
class ModelOutSchema(PackageEntityOutSchema):
|
|
pass
|
|
|
|
|
|
class CompoundStructureOutSchema(PackageEntityOutSchema):
|
|
compound: str = ""
|
|
|
|
@staticmethod
|
|
def resolve_compound(obj):
|
|
return obj.compound.url
|
|
|
|
@staticmethod
|
|
def resolve_package(obj):
|
|
return obj.compound.package.url
|
|
|
|
@staticmethod
|
|
def resolve_review_status(obj):
|
|
return "reviewed" if obj.compound.package.reviewed else "unreviewed"
|
|
|
|
|
|
# Package is special (no package FK)
|
|
class PackageOutSchema(Schema):
|
|
uuid: UUID
|
|
url: str = ""
|
|
name: str
|
|
description: str
|
|
review_status: str = ""
|
|
|
|
@staticmethod
|
|
def resolve_url(obj):
|
|
return obj.url
|
|
|
|
@staticmethod
|
|
def resolve_review_status(obj):
|
|
return "reviewed" if obj.reviewed else "unreviewed"
|
|
|
|
|
|
class SettingOutSchema(Schema):
|
|
uuid: UUID
|
|
url: str = ""
|
|
name: str
|
|
description: str
|