from .interface import AnalyticsModuleInterface from .params import Param, ParamSchema class AttributeValues(AnalyticsModuleInterface): description = """ """ inputs = [ ParamSchema, Param("attribute_id", ptype=int, configurable=False), Param("collection_id", ptype=int, required=False), Param("collection_ids", ptype=list, required=False), ] outputs = [Param("value", int, idx=0)] @staticmethod def get_query( # type: ignore schema: str, collection_id: str = None, collection_ids: str = None, **kwargs ) -> str: """Generate SQL query based on the fields""" collection_fan = "" fan_attribute_where = "" if collection_id is not None or collection_ids: collection_fan = ( f"INNER JOIN {schema}.collection_fan cf ON fa.fan_id = cf.fan_id " ) if collection_ids: collection_fan += f"AND cf.collection_id IN ({', '.join(str(int(i)) for i in collection_ids)}) " fan_attribute_where = f"AND fa.collection_id IN ({', '.join(str(int(i)) for i in collection_ids)}) " else: collection_fan += "AND cf.collection_id = %(collection_id)s " result_query = ( f"SELECT DISTINCT COALESCE(value, 'unknown') AS value " f"FROM {schema}.fan_attribute fa " f"{collection_fan}" f"WHERE fa.attribute_id = %(attribute_id)s " f"{fan_attribute_where}" f";" ) return result_query