41 lines
1.6 KiB
Python
41 lines
1.6 KiB
Python
import logging
|
|
from typing import Tuple, Optional, List, Dict, Any
|
|
|
|
from . import element_mapper
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class PrefixResolver:
|
|
"""Resolve prefixes for element mapping"""
|
|
|
|
@staticmethod
|
|
def get_element_prefix(element_label: str) -> str:
|
|
"""Extract prefix from element label"""
|
|
if element_label and "_" in element_label:
|
|
return element_label.split("_")[0]
|
|
return ""
|
|
|
|
@staticmethod
|
|
def determine_prefix_to_use(element_candidate_prefix: str, group_prefix: str,
|
|
element_mappings: List[Dict[str, Any]], svg_type: str) -> Tuple[Optional[str], str]:
|
|
"""Determine which prefix to use for mapping lookup
|
|
|
|
Group prefixes always take precedence over element prefixes.
|
|
"""
|
|
# First check group prefix since it should take precedence
|
|
if group_prefix:
|
|
_, group_match_type = element_mapper.find_mapping_for_element(
|
|
svg_type, group_prefix, element_mappings, debug=False
|
|
)
|
|
if group_match_type == 'exact':
|
|
return group_prefix, "group"
|
|
|
|
# Only check element prefix if no valid group prefix exists
|
|
if element_candidate_prefix:
|
|
_, element_match_type = element_mapper.find_mapping_for_element(
|
|
svg_type, element_candidate_prefix, element_mappings, debug=False
|
|
)
|
|
if element_match_type == 'exact':
|
|
return element_candidate_prefix, "element"
|
|
|
|
return None, "none" |