"""Logic for retrieving top tracks.""" from ddtrace import tracer from oto import response as oto_response from sound_recordings.logic import permissions from sound_recordings.models import top_sound_recordings as top_sound_recordings_model from sound_recordings.schemas import top_sound_recordings as top_sound_recordings_schema from sound_recordings.validation.schema import schema_dump @tracer.wrap(name="get_top_sound_recordings") def get_top_sound_recordings( request_context, distributors, limit, offset, countries=[], order_by="streams_7_days", ): """Fetch top sound_recordings. Args: request_context (RequestContext): RequestContext class distributors (str[]): list of distributors names limit (int): max number of results, offset (int): starting index of results countries (str[]): list of country codes to filter by order_by (str): selector for column of interest Returns: oto_response.Response: top_sound_recordings payload """ permissions_filter = permissions.get_permissions_filter(request_context) # get top sound_recordings top_sound_recordings = top_sound_recordings_model.get_top_sound_recordings( permissions_filter, distributors, limit, offset, countries, order_by ) if not top_sound_recordings: return oto_response.Response({"items": []}) response = {"items": top_sound_recordings} # dump to JSON schema = top_sound_recordings_schema.TopSoundRecordingsSchema() result = schema_dump(schema, response) return oto_response.Response(result)