mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2026-01-01 22:07:03 -05:00
648 lines
23 KiB
Python
648 lines
23 KiB
Python
"""
|
|
Rich Choice Objects for Rides Domain
|
|
|
|
This module defines all choice objects for the rides domain, replacing
|
|
the legacy tuple-based choices with rich choice objects.
|
|
"""
|
|
|
|
from apps.core.choices import ChoiceCategory, RichChoice
|
|
from apps.core.choices.registry import register_choices
|
|
|
|
# Ride Category Choices
|
|
RIDE_CATEGORIES = [
|
|
RichChoice(
|
|
value="RC",
|
|
label="Roller Coaster",
|
|
description="Thrill rides with tracks featuring hills, loops, and high speeds",
|
|
metadata={"color": "red", "icon": "roller-coaster", "css_class": "bg-red-100 text-red-800", "sort_order": 1},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="DR",
|
|
label="Dark Ride",
|
|
description="Indoor rides with themed environments and storytelling",
|
|
metadata={
|
|
"color": "purple",
|
|
"icon": "dark-ride",
|
|
"css_class": "bg-purple-100 text-purple-800",
|
|
"sort_order": 2,
|
|
},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="FR",
|
|
label="Flat Ride",
|
|
description="Rides that move along a generally flat plane with spinning, swinging, or bouncing motions",
|
|
metadata={"color": "blue", "icon": "flat-ride", "css_class": "bg-blue-100 text-blue-800", "sort_order": 3},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="WR",
|
|
label="Water Ride",
|
|
description="Rides that incorporate water elements like splashing, floating, or getting wet",
|
|
metadata={"color": "cyan", "icon": "water-ride", "css_class": "bg-cyan-100 text-cyan-800", "sort_order": 4},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="TR",
|
|
label="Transport Ride",
|
|
description="Rides primarily designed for transportation around the park",
|
|
metadata={"color": "green", "icon": "transport", "css_class": "bg-green-100 text-green-800", "sort_order": 5},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="OT",
|
|
label="Other",
|
|
description="Rides that don't fit into standard categories",
|
|
metadata={"color": "gray", "icon": "other", "css_class": "bg-gray-100 text-gray-800", "sort_order": 6},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
]
|
|
|
|
# Ride Status Choices
|
|
RIDE_STATUSES = [
|
|
RichChoice(
|
|
value="OPERATING",
|
|
label="Operating",
|
|
description="Ride is currently open and operating normally",
|
|
metadata={
|
|
"color": "green",
|
|
"icon": "check-circle",
|
|
"css_class": "bg-green-100 text-green-800",
|
|
"sort_order": 1,
|
|
"can_transition_to": [
|
|
"CLOSED_TEMP",
|
|
"SBNO",
|
|
"CLOSING",
|
|
],
|
|
"requires_moderator": False,
|
|
"is_final": False,
|
|
"is_initial": True,
|
|
},
|
|
category=ChoiceCategory.STATUS,
|
|
),
|
|
RichChoice(
|
|
value="CLOSED_TEMP",
|
|
label="Temporarily Closed",
|
|
description="Ride is temporarily closed for maintenance, weather, or other short-term reasons",
|
|
metadata={
|
|
"color": "yellow",
|
|
"icon": "pause-circle",
|
|
"css_class": "bg-yellow-100 text-yellow-800",
|
|
"sort_order": 2,
|
|
"can_transition_to": [
|
|
"SBNO",
|
|
"CLOSING",
|
|
],
|
|
"requires_moderator": False,
|
|
"is_final": False,
|
|
},
|
|
category=ChoiceCategory.STATUS,
|
|
),
|
|
RichChoice(
|
|
value="SBNO",
|
|
label="Standing But Not Operating",
|
|
description="Ride structure remains but is not currently operating",
|
|
metadata={
|
|
"color": "orange",
|
|
"icon": "stop-circle",
|
|
"css_class": "bg-orange-100 text-orange-800",
|
|
"sort_order": 3,
|
|
"can_transition_to": [
|
|
"CLOSED_PERM",
|
|
"DEMOLISHED",
|
|
"RELOCATED",
|
|
],
|
|
"requires_moderator": True,
|
|
"is_final": False,
|
|
},
|
|
category=ChoiceCategory.STATUS,
|
|
),
|
|
RichChoice(
|
|
value="CLOSING",
|
|
label="Closing",
|
|
description="Ride is scheduled to close permanently",
|
|
metadata={
|
|
"color": "red",
|
|
"icon": "x-circle",
|
|
"css_class": "bg-red-100 text-red-800",
|
|
"sort_order": 4,
|
|
"can_transition_to": [
|
|
"CLOSED_PERM",
|
|
"SBNO",
|
|
],
|
|
"requires_moderator": True,
|
|
"is_final": False,
|
|
},
|
|
category=ChoiceCategory.STATUS,
|
|
),
|
|
RichChoice(
|
|
value="CLOSED_PERM",
|
|
label="Permanently Closed",
|
|
description="Ride has been permanently closed and will not reopen",
|
|
metadata={
|
|
"color": "red",
|
|
"icon": "x-circle",
|
|
"css_class": "bg-red-100 text-red-800",
|
|
"sort_order": 5,
|
|
"can_transition_to": [
|
|
"DEMOLISHED",
|
|
"RELOCATED",
|
|
],
|
|
"requires_moderator": True,
|
|
"is_final": False,
|
|
},
|
|
category=ChoiceCategory.STATUS,
|
|
),
|
|
RichChoice(
|
|
value="UNDER_CONSTRUCTION",
|
|
label="Under Construction",
|
|
description="Ride is currently being built or undergoing major renovation",
|
|
metadata={
|
|
"color": "blue",
|
|
"icon": "tool",
|
|
"css_class": "bg-blue-100 text-blue-800",
|
|
"sort_order": 6,
|
|
"can_transition_to": [
|
|
"OPERATING",
|
|
],
|
|
"requires_moderator": False,
|
|
"is_final": False,
|
|
},
|
|
category=ChoiceCategory.STATUS,
|
|
),
|
|
RichChoice(
|
|
value="DEMOLISHED",
|
|
label="Demolished",
|
|
description="Ride has been completely removed and demolished",
|
|
metadata={
|
|
"color": "gray",
|
|
"icon": "trash",
|
|
"css_class": "bg-gray-100 text-gray-800",
|
|
"sort_order": 7,
|
|
"can_transition_to": [],
|
|
"requires_moderator": True,
|
|
"is_final": True,
|
|
},
|
|
category=ChoiceCategory.STATUS,
|
|
),
|
|
RichChoice(
|
|
value="RELOCATED",
|
|
label="Relocated",
|
|
description="Ride has been moved to a different location",
|
|
metadata={
|
|
"color": "purple",
|
|
"icon": "arrow-right",
|
|
"css_class": "bg-purple-100 text-purple-800",
|
|
"sort_order": 8,
|
|
"can_transition_to": [],
|
|
"requires_moderator": True,
|
|
"is_final": True,
|
|
},
|
|
category=ChoiceCategory.STATUS,
|
|
),
|
|
]
|
|
|
|
# Post-Closing Status Choices
|
|
POST_CLOSING_STATUSES = [
|
|
RichChoice(
|
|
value="SBNO",
|
|
label="Standing But Not Operating",
|
|
description="Ride structure remains but is not operating after closure",
|
|
metadata={
|
|
"color": "orange",
|
|
"icon": "stop-circle",
|
|
"css_class": "bg-orange-100 text-orange-800",
|
|
"sort_order": 1,
|
|
},
|
|
category=ChoiceCategory.STATUS,
|
|
),
|
|
RichChoice(
|
|
value="CLOSED_PERM",
|
|
label="Permanently Closed",
|
|
description="Ride has been permanently closed after the closing date",
|
|
metadata={"color": "red", "icon": "x-circle", "css_class": "bg-red-100 text-red-800", "sort_order": 2},
|
|
category=ChoiceCategory.STATUS,
|
|
),
|
|
]
|
|
|
|
# Roller Coaster Track Material Choices
|
|
TRACK_MATERIALS = [
|
|
RichChoice(
|
|
value="STEEL",
|
|
label="Steel",
|
|
description="Modern steel track construction providing smooth rides and complex layouts",
|
|
metadata={"color": "gray", "icon": "steel", "css_class": "bg-gray-100 text-gray-800", "sort_order": 1},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="WOOD",
|
|
label="Wood",
|
|
description="Traditional wooden track construction providing classic coaster experience",
|
|
metadata={"color": "amber", "icon": "wood", "css_class": "bg-amber-100 text-amber-800", "sort_order": 2},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="HYBRID",
|
|
label="Hybrid",
|
|
description="Combination of steel and wooden construction elements",
|
|
metadata={"color": "orange", "icon": "hybrid", "css_class": "bg-orange-100 text-orange-800", "sort_order": 3},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
]
|
|
|
|
# Roller Coaster Type Choices
|
|
COASTER_TYPES = [
|
|
RichChoice(
|
|
value="SITDOWN",
|
|
label="Sit Down",
|
|
description="Traditional seated roller coaster with riders sitting upright",
|
|
metadata={"color": "blue", "icon": "sitdown", "css_class": "bg-blue-100 text-blue-800", "sort_order": 1},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="INVERTED",
|
|
label="Inverted",
|
|
description="Coaster where riders' feet dangle freely below the track",
|
|
metadata={"color": "purple", "icon": "inverted", "css_class": "bg-purple-100 text-purple-800", "sort_order": 2},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="FLYING",
|
|
label="Flying",
|
|
description="Riders lie face-down in a flying position",
|
|
metadata={"color": "sky", "icon": "flying", "css_class": "bg-sky-100 text-sky-800", "sort_order": 3},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="STANDUP",
|
|
label="Stand Up",
|
|
description="Riders stand upright during the ride",
|
|
metadata={"color": "green", "icon": "standup", "css_class": "bg-green-100 text-green-800", "sort_order": 4},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="WING",
|
|
label="Wing",
|
|
description="Riders sit on either side of the track with nothing above or below",
|
|
metadata={"color": "indigo", "icon": "wing", "css_class": "bg-indigo-100 text-indigo-800", "sort_order": 5},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="DIVE",
|
|
label="Dive",
|
|
description="Features a vertical or near-vertical drop as the main element",
|
|
metadata={"color": "red", "icon": "dive", "css_class": "bg-red-100 text-red-800", "sort_order": 6},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="FAMILY",
|
|
label="Family",
|
|
description="Designed for riders of all ages with moderate thrills",
|
|
metadata={
|
|
"color": "emerald",
|
|
"icon": "family",
|
|
"css_class": "bg-emerald-100 text-emerald-800",
|
|
"sort_order": 7,
|
|
},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="WILD_MOUSE",
|
|
label="Wild Mouse",
|
|
description="Compact coaster with sharp turns and sudden drops",
|
|
metadata={"color": "yellow", "icon": "mouse", "css_class": "bg-yellow-100 text-yellow-800", "sort_order": 8},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="SPINNING",
|
|
label="Spinning",
|
|
description="Cars rotate freely during the ride",
|
|
metadata={"color": "pink", "icon": "spinning", "css_class": "bg-pink-100 text-pink-800", "sort_order": 9},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="FOURTH_DIMENSION",
|
|
label="4th Dimension",
|
|
description="Seats rotate independently of the track direction",
|
|
metadata={"color": "violet", "icon": "4d", "css_class": "bg-violet-100 text-violet-800", "sort_order": 10},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="OTHER",
|
|
label="Other",
|
|
description="Coaster type that doesn't fit standard classifications",
|
|
metadata={"color": "gray", "icon": "other", "css_class": "bg-gray-100 text-gray-800", "sort_order": 11},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
]
|
|
|
|
# Propulsion System Choices
|
|
PROPULSION_SYSTEMS = [
|
|
RichChoice(
|
|
value="CHAIN",
|
|
label="Chain Lift",
|
|
description="Traditional chain lift system to pull trains up the lift hill",
|
|
metadata={"color": "gray", "icon": "chain", "css_class": "bg-gray-100 text-gray-800", "sort_order": 1},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="LSM",
|
|
label="LSM Launch",
|
|
description="Linear Synchronous Motor launch system using magnetic propulsion",
|
|
metadata={"color": "blue", "icon": "lightning", "css_class": "bg-blue-100 text-blue-800", "sort_order": 2},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="HYDRAULIC",
|
|
label="Hydraulic Launch",
|
|
description="High-pressure hydraulic launch system for rapid acceleration",
|
|
metadata={"color": "red", "icon": "hydraulic", "css_class": "bg-red-100 text-red-800", "sort_order": 3},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="GRAVITY",
|
|
label="Gravity",
|
|
description="Uses gravity and momentum without mechanical lift systems",
|
|
metadata={"color": "green", "icon": "gravity", "css_class": "bg-green-100 text-green-800", "sort_order": 4},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="OTHER",
|
|
label="Other",
|
|
description="Propulsion system that doesn't fit standard categories",
|
|
metadata={"color": "gray", "icon": "other", "css_class": "bg-gray-100 text-gray-800", "sort_order": 5},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
]
|
|
|
|
# Ride Model Target Market Choices
|
|
TARGET_MARKETS = [
|
|
RichChoice(
|
|
value="FAMILY",
|
|
label="Family",
|
|
description="Designed for families with children, moderate thrills",
|
|
metadata={"color": "green", "icon": "family", "css_class": "bg-green-100 text-green-800", "sort_order": 1},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="THRILL",
|
|
label="Thrill",
|
|
description="High-intensity rides for thrill seekers",
|
|
metadata={"color": "red", "icon": "thrill", "css_class": "bg-red-100 text-red-800", "sort_order": 2},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="EXTREME",
|
|
label="Extreme",
|
|
description="Maximum intensity rides for extreme thrill seekers",
|
|
metadata={"color": "purple", "icon": "extreme", "css_class": "bg-purple-100 text-purple-800", "sort_order": 3},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="KIDDIE",
|
|
label="Kiddie",
|
|
description="Gentle rides designed specifically for young children",
|
|
metadata={"color": "yellow", "icon": "kiddie", "css_class": "bg-yellow-100 text-yellow-800", "sort_order": 4},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="ALL_AGES",
|
|
label="All Ages",
|
|
description="Suitable for riders of all ages and thrill preferences",
|
|
metadata={"color": "blue", "icon": "all-ages", "css_class": "bg-blue-100 text-blue-800", "sort_order": 5},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
]
|
|
|
|
# Ride Model Photo Type Choices
|
|
PHOTO_TYPES = [
|
|
RichChoice(
|
|
value="PROMOTIONAL",
|
|
label="Promotional",
|
|
description="Marketing and promotional photos of the ride model",
|
|
metadata={"color": "blue", "icon": "camera", "css_class": "bg-blue-100 text-blue-800", "sort_order": 1},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="TECHNICAL",
|
|
label="Technical Drawing",
|
|
description="Technical drawings and engineering diagrams",
|
|
metadata={"color": "gray", "icon": "blueprint", "css_class": "bg-gray-100 text-gray-800", "sort_order": 2},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="INSTALLATION",
|
|
label="Installation Example",
|
|
description="Photos of actual installations of this ride model",
|
|
metadata={
|
|
"color": "green",
|
|
"icon": "installation",
|
|
"css_class": "bg-green-100 text-green-800",
|
|
"sort_order": 3,
|
|
},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="RENDERING",
|
|
label="3D Rendering",
|
|
description="Computer-generated 3D renderings of the ride model",
|
|
metadata={"color": "purple", "icon": "cube", "css_class": "bg-purple-100 text-purple-800", "sort_order": 4},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="CATALOG",
|
|
label="Catalog Image",
|
|
description="Official catalog and brochure images",
|
|
metadata={"color": "orange", "icon": "catalog", "css_class": "bg-orange-100 text-orange-800", "sort_order": 5},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
]
|
|
|
|
# Technical Specification Category Choices
|
|
SPEC_CATEGORIES = [
|
|
RichChoice(
|
|
value="DIMENSIONS",
|
|
label="Dimensions",
|
|
description="Physical dimensions and measurements",
|
|
metadata={"color": "blue", "icon": "ruler", "css_class": "bg-blue-100 text-blue-800", "sort_order": 1},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="PERFORMANCE",
|
|
label="Performance",
|
|
description="Performance specifications and capabilities",
|
|
metadata={"color": "red", "icon": "speedometer", "css_class": "bg-red-100 text-red-800", "sort_order": 2},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="CAPACITY",
|
|
label="Capacity",
|
|
description="Rider capacity and throughput specifications",
|
|
metadata={"color": "green", "icon": "users", "css_class": "bg-green-100 text-green-800", "sort_order": 3},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="SAFETY",
|
|
label="Safety Features",
|
|
description="Safety systems and features",
|
|
metadata={"color": "yellow", "icon": "shield", "css_class": "bg-yellow-100 text-yellow-800", "sort_order": 4},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="ELECTRICAL",
|
|
label="Electrical Requirements",
|
|
description="Power and electrical system requirements",
|
|
metadata={
|
|
"color": "purple",
|
|
"icon": "lightning",
|
|
"css_class": "bg-purple-100 text-purple-800",
|
|
"sort_order": 5,
|
|
},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="FOUNDATION",
|
|
label="Foundation Requirements",
|
|
description="Foundation and structural requirements",
|
|
metadata={"color": "gray", "icon": "foundation", "css_class": "bg-gray-100 text-gray-800", "sort_order": 6},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="MAINTENANCE",
|
|
label="Maintenance",
|
|
description="Maintenance requirements and procedures",
|
|
metadata={"color": "orange", "icon": "wrench", "css_class": "bg-orange-100 text-orange-800", "sort_order": 7},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
RichChoice(
|
|
value="OTHER",
|
|
label="Other",
|
|
description="Other technical specifications",
|
|
metadata={"color": "gray", "icon": "other", "css_class": "bg-gray-100 text-gray-800", "sort_order": 8},
|
|
category=ChoiceCategory.TECHNICAL,
|
|
),
|
|
]
|
|
|
|
# Company Role Choices for Rides Domain (MANUFACTURER and DESIGNER only)
|
|
RIDES_COMPANY_ROLES = [
|
|
RichChoice(
|
|
value="MANUFACTURER",
|
|
label="Ride Manufacturer",
|
|
description="Company that designs and builds ride hardware and systems",
|
|
metadata={
|
|
"color": "blue",
|
|
"icon": "factory",
|
|
"css_class": "bg-blue-100 text-blue-800",
|
|
"sort_order": 1,
|
|
"domain": "rides",
|
|
"permissions": ["manage_ride_models", "view_manufacturing"],
|
|
"url_pattern": "/rides/manufacturers/{slug}/",
|
|
},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
RichChoice(
|
|
value="DESIGNER",
|
|
label="Ride Designer",
|
|
description="Company that specializes in ride design, layout, and engineering",
|
|
metadata={
|
|
"color": "purple",
|
|
"icon": "design",
|
|
"css_class": "bg-purple-100 text-purple-800",
|
|
"sort_order": 2,
|
|
"domain": "rides",
|
|
"permissions": ["manage_ride_designs", "view_design_specs"],
|
|
"url_pattern": "/rides/designers/{slug}/",
|
|
},
|
|
category=ChoiceCategory.CLASSIFICATION,
|
|
),
|
|
]
|
|
|
|
|
|
def register_rides_choices():
|
|
"""Register all rides domain choices with the global registry"""
|
|
|
|
register_choices(
|
|
name="categories",
|
|
choices=RIDE_CATEGORIES,
|
|
domain="rides",
|
|
description="Ride category classifications",
|
|
metadata={"domain": "rides", "type": "category"},
|
|
)
|
|
|
|
register_choices(
|
|
name="statuses",
|
|
choices=RIDE_STATUSES,
|
|
domain="rides",
|
|
description="Ride operational status options",
|
|
metadata={"domain": "rides", "type": "status"},
|
|
)
|
|
|
|
register_choices(
|
|
name="post_closing_statuses",
|
|
choices=POST_CLOSING_STATUSES,
|
|
domain="rides",
|
|
description="Status options after ride closure",
|
|
metadata={"domain": "rides", "type": "post_closing_status"},
|
|
)
|
|
|
|
register_choices(
|
|
name="track_materials",
|
|
choices=TRACK_MATERIALS,
|
|
domain="rides",
|
|
description="Roller coaster track material types",
|
|
metadata={"domain": "rides", "type": "track_material", "applies_to": "roller_coasters"},
|
|
)
|
|
|
|
register_choices(
|
|
name="coaster_types",
|
|
choices=COASTER_TYPES,
|
|
domain="rides",
|
|
description="Roller coaster type classifications",
|
|
metadata={"domain": "rides", "type": "coaster_type", "applies_to": "roller_coasters"},
|
|
)
|
|
|
|
register_choices(
|
|
name="propulsion_systems",
|
|
choices=PROPULSION_SYSTEMS,
|
|
domain="rides",
|
|
description="Roller coaster propulsion and lift systems",
|
|
metadata={"domain": "rides", "type": "propulsion_system", "applies_to": "roller_coasters"},
|
|
)
|
|
|
|
register_choices(
|
|
name="target_markets",
|
|
choices=TARGET_MARKETS,
|
|
domain="rides",
|
|
description="Target market classifications for ride models",
|
|
metadata={"domain": "rides", "type": "target_market", "applies_to": "ride_models"},
|
|
)
|
|
|
|
register_choices(
|
|
name="photo_types",
|
|
choices=PHOTO_TYPES,
|
|
domain="rides",
|
|
description="Photo type classifications for ride model images",
|
|
metadata={"domain": "rides", "type": "photo_type", "applies_to": "ride_model_photos"},
|
|
)
|
|
|
|
register_choices(
|
|
name="spec_categories",
|
|
choices=SPEC_CATEGORIES,
|
|
domain="rides",
|
|
description="Technical specification category classifications",
|
|
metadata={"domain": "rides", "type": "spec_category", "applies_to": "ride_model_specs"},
|
|
)
|
|
|
|
register_choices(
|
|
name="company_roles",
|
|
choices=RIDES_COMPANY_ROLES,
|
|
domain="rides",
|
|
description="Company role classifications for rides domain (MANUFACTURER and DESIGNER only)",
|
|
metadata={"domain": "rides", "type": "company_role"},
|
|
)
|
|
|
|
|
|
# Auto-register choices when module is imported
|
|
register_rides_choices()
|