"""Definition Key is a chart definition_key created as a string from {platform}_{type}_{frequency} related to a specific chart. """ from typing import List, Dict, Tuple, Optional from charts.constants.common import DEFAULT_CHART_DEFINITION_KEY_ORDERED_MAPPINGS, \ DEFAULT_CHART_DEFINITION_KEY_SEPARATOR def _create_chart_definition_key( data: Dict[str, str], keys_to_build_from: Tuple = DEFAULT_CHART_DEFINITION_KEY_ORDERED_MAPPINGS, separator: Optional[str] = None): """Get a dict object and create a chart definition key Args: data: Single chart data item Returns: String data example: { "type": "regional", "platform": "spotify", "target": "track", "frequency": "daily", } result example: "spotify_regional_daily" """ if not separator: separator = DEFAULT_CHART_DEFINITION_KEY_SEPARATOR return f"{separator}".join([data[key].replace(" ", "").lower() for key in keys_to_build_from]) def split_definition_key(definition_key: str, lower_values: bool = True, separator: str = "_") -> List[str]: """Split a chart definition key and return a dict with key values of a definition key is created from Args: definition_key: a chart definition_key like "spotify_viral_daily", "apple_default_daily" ... e.t.c lower_values: to lower the values of a split definition_key array while mapping separator: separator used to split the definition_key into values Returns: List of strings with order of values like [platform, type, frequency] """ return (definition_key.lower() if lower_values else definition_key).split(separator)