from collections import defaultdict from itertools import chain from server.constants.distributors import DISTRIBUTORS from tests.helpers import value_from_enum from tests.helpers import seq from tests.data.base.albums import upc from tests.data.base.tracks import track_id, spotify_track_id, apple_track_id, dsp_to_id_func def distributor_getter(enum=DISTRIBUTORS, with_none=False): return value_from_enum(enum, with_none=with_none) # server/client/clients/dsp_api/delphi.get_tracks_brands_tagging def get_tracks_brands_tagging_mock( n=3, by_track=False, unknown_ids=None, unknown_upcs=None, dist_to_ids=None, dsp_to_ids=None) -> dict: # by default return n evens: 2, 4, 6, ... def _item(j): return { "upc": upc(j), "track_id": id_to_dsp.get(j, spotify_track_id)(j) if by_track else None, "distributed_by": [k for k, v in dist_to_ids.items() if j in v] } id_to_dsp = {_id: dsp_to_id_func[dsp] for dsp, ids in (dsp_to_ids or {}).items() for _id in ids} if not dist_to_ids: owner_keys = ("awal", "theorchard") dist_to_ids = defaultdict(list) for i in range(1, n + 1): dist_to_ids[owner_keys[i % 2]].append(2 * i) # 2, 6, 10, ... -> awal, 4, 8, 12, ... -> theorchard items = [_item(i) for i in set(chain(*dist_to_ids.values()))] result = { "items": items, "count": len(items), } if unknown_ids: result["unknown_ids"] = unknown_ids if unknown_upcs: result["unknown_upcs"] = unknown_upcs return result # server/scenarios/distributors/distributors.get_distributors def get_distributors_mock(dsp_to_ids=None, dist_to_ids=None, by_track=False, with_extra_data=False, extra_data=None): id_to_dsp = {_id: dsp for dsp, tracks in dsp_to_ids.items() for _id in tracks} if dsp_to_ids else {} id_to_dist = {_id: dist for dist, tracks in dist_to_ids.items() for _id in tracks} if dist_to_ids else {} data = [ { "upc": upc(i), "track_id": dsp_to_id_func[id_to_dsp.get(i, "spotify")](i) if by_track else None, "distributed_by": dist } for i, dist in id_to_dist.items() ] if with_extra_data: return data, extra_data or {} return data # server/scenarios/distributors/distributors.get_tracks_distributors_map def get_tracks_distributors_map_mock( dsp_to_ids=None, dist_to_ids=None, remove_result_dsp_prefix=False, with_extra_data=False, extra_data=None, track_id_func=None): id_to_dsp = {_id: dsp for dsp, tracks in dsp_to_ids.items() for _id in tracks} if dsp_to_ids else {} id_to_dist = {_id: dist for dist, tracks in dist_to_ids.items() for _id in tracks} if dist_to_ids else {} track_id_getter = track_id_func or (track_id if remove_result_dsp_prefix else lambda i: dsp_to_id_func[id_to_dsp.get(i, "spotify")](i)) data = { track_id_getter(i): dist for i, dist in id_to_dist.items() } if extra_data or with_extra_data: return data, extra_data or {} return data