"""FSM Django App Configuration""" import logging from django.apps import AppConfig logger = logging.getLogger(__name__) class FsmConfig(AppConfig): default_auto_field = 'django.db.models.UUIDField' name = 'fsm' verbose_name = 'Label Studio FSM' def ready(self): """ Import models and state_choices to ensure registration happens on Django startup. The @register_state_model and @register_state_choices decorators run during module import, so we must import these modules to populate the registries. This ensures state models are available throughout the application lifecycle. CENTRALIZED TRANSITION REGISTRATION: This is the ONLY place in LSO where FSM transitions should be imported. When running LSE, transitions are skipped here and registered in lse_fsm/apps.py instead. """ from core.utils.common import is_community # Always import base models and state_choices (needed for registry) from . import ( models, # noqa: F401 - FsmHistoryStateModel base class state_choices, # noqa: F401 - State choice definitions ) # Import state models only in community edition # LSE will register its own extended state models in lse_fsm/apps.py if is_community(): from . import ( state_models, # noqa: F401 - OSS state models (TaskState, AnnotationState, etc.) ) logger.debug('FSM: Registered OSS state models') logger.debug('FSM models and state choices registered') # Only import LSO transitions when running community edition # When running LSE, skip these entirely - LSE provides its own transitions if is_community(): # Import all LSO transitions centrally from fsm/ - ONLY place to do this from . import ( annotation_transitions, # noqa: F401 project_transitions, # noqa: F401 task_transitions, # noqa: F401 ) logger.info('LSO FSM: Registered LSO transitions (community edition)') else: logger.info('LSO FSM: Skipping LSO transitions (running LSE)')