Encapsulate target-type dispatch via polymorphism (Phase 1)
Replace isinstance checks with polymorphic methods on PictureTarget hierarchy: register_with_manager, sync_with_manager, update_fields, and has_picture_source property. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -191,25 +191,10 @@ async def create_target(
|
||||
)
|
||||
|
||||
# Register in processor manager
|
||||
if isinstance(target, WledPictureTarget) and target.device_id:
|
||||
try:
|
||||
manager.add_target(
|
||||
target_id=target.id,
|
||||
device_id=target.device_id,
|
||||
settings=target.settings,
|
||||
picture_source_id=target.picture_source_id,
|
||||
)
|
||||
except ValueError as e:
|
||||
logger.warning(f"Could not register target {target.id} in processor manager: {e}")
|
||||
elif isinstance(target, KeyColorsPictureTarget):
|
||||
try:
|
||||
manager.add_kc_target(
|
||||
target_id=target.id,
|
||||
picture_source_id=target.picture_source_id,
|
||||
settings=target.settings,
|
||||
)
|
||||
except ValueError as e:
|
||||
logger.warning(f"Could not register KC target {target.id}: {e}")
|
||||
try:
|
||||
target.register_with_manager(manager)
|
||||
except ValueError as e:
|
||||
logger.warning(f"Could not register target {target.id} in processor manager: {e}")
|
||||
|
||||
return _target_to_response(target)
|
||||
|
||||
@@ -279,14 +264,14 @@ async def update_target(
|
||||
description=data.description,
|
||||
)
|
||||
|
||||
# Sync processor manager (unified API handles both target types)
|
||||
# Sync processor manager
|
||||
try:
|
||||
if data.settings is not None or data.key_colors_settings is not None:
|
||||
manager.update_target_settings(target_id, target.settings)
|
||||
if data.picture_source_id is not None:
|
||||
manager.update_target_source(target_id, target.picture_source_id)
|
||||
if data.device_id is not None and isinstance(target, WledPictureTarget):
|
||||
manager.update_target_device(target_id, target.device_id)
|
||||
target.sync_with_manager(
|
||||
manager,
|
||||
settings_changed=data.settings is not None or data.key_colors_settings is not None,
|
||||
source_changed=data.picture_source_id is not None,
|
||||
device_changed=data.device_id is not None,
|
||||
)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user