Source code for openpypeline.app.maya.core.tracker_factory

"""
File: tracker_factory.py
Description: Factory for creating and connecting to a production tracker instance.
             Dynamically loads the appropriate tracker based on user settings.
"""

import logging
from openpypeline.core.util import prefs

logger = logging.getLogger("openPypeline.tracking.factory")

[docs] def get_tracker(tracker_type=None, url=None, user=None, key=None): """ Factory function to get an instance of the configured production tracker. Reads pipeline preferences to determine which tracker to instantiate and connect to. Returns: An instance of a ProductionTracker subclass if successful, otherwise None. """ if tracker_type is None: tracker_type = prefs.get_pref("ops_tracker_type", "none") if tracker_type == "none" or not tracker_type: logger.info("No production tracker is configured.") return None if url is None: url = prefs.get_pref("ops_tracker_url", "") if user is None: user = prefs.get_pref("ops_tracker_user", "") if key is None: key = prefs.get_pref("ops_tracker_key", "") if not all([url, user, key]): logger.warning(f"Tracker '{tracker_type}' is configured, but URL/Auth details are missing. Check your settings.") return None tracker = None if tracker_type == "shotgrid": try: from openpypeline.app.maya.core.shotgrid_tracker import ShotGridTracker tracker = ShotGridTracker(url, user, key) except ImportError: logger.error("Failed to import ShotGridTracker. Make sure shotgrid_tracker.py is available.") return None else: logger.error(f"Unknown tracker type configured: {tracker_type}") return None if tracker and tracker.connect(): logger.info(f"Successfully initialized and connected to {tracker_type}.") return tracker else: logger.error(f"Failed to connect to tracker: {tracker_type}") return None