from typing import Dict from marshmallow import fields from charts.constants.chart_names import CHART_DEFINITION_KEY_TO_CHART_NAME_MAPPING def get_chart_name_mixin( chart_name_key: str = "definition_key_mapping", chart_name_mappings: Dict[str, str] = CHART_DEFINITION_KEY_TO_CHART_NAME_MAPPING, serialize_field_name: str = "chartName" ) -> type: """Get proper chart name form mapping by chart_name_key Args: chart_name_key: is a string key built from {platform}_{type}_{frequency} example: spotify_regional_weekly, spotify_regional_daily, spotify_viral_daile, apple_default_daily e.t.c chart_name_mappings: is as mapping of a chart_name_key to chart name serialize_field_name: field name to be returned """ class ChartName: chart_name = fields.Method("_get_chart_name", data_key=serialize_field_name) def _get_chart_name(self, data, *args, **kwargs): """Get a proper chart name""" return chart_name_mappings[data[chart_name_key]] return ChartName # Chart Name Mixin with default key, chart name mappings and field name ChartNameMixin = get_chart_name_mixin()