import json from datetime import datetime, timedelta from apollo_playlists_messages.constants import EventCode from tests.data.base import meta, content from tests.data.utils import set_data, serialize_datetime def create_raw_event(i, code: EventCode, exclude=None, extra=None, **kwargs): is_even = (i % 2) == 0 data = { "id": i, "app": "apollo", "code": code.value, "external_id": f"ext_id_{i}", "ttl": 60 * 60, "created_at": datetime.utcnow() - timedelta(minutes=30), "meta": meta(is_even), "publisher": { "id": f"publisher_id_{i}", "owner": "apollo", }, } set_data(data, exclude=exclude, extra=extra, **kwargs) return data def create_full_event(i, code: EventCode, exclude=None, extra=None, playlist_country_code=None, **kwargs): is_even = (i % 2) == 0 data = { "id": i, "app": "apollo", "code": code.value, "external_id": f"ext_id_{i}", "ttl": 60 * 60, "created_at": serialize_datetime(datetime.utcnow() - timedelta(minutes=30)), "public": True, "context": None, "event_id": None, "meta": meta(is_even), "data": { "current_event_dt": serialize_datetime(datetime.utcnow() - timedelta(minutes=50)), "content": content( i, with_track=( code in [EventCode.ENTRY, EventCode.EXIT, EventCode.MAJOR_MOVE] ), updated_key="last_updated_at", country_code=playlist_country_code, event_code=code ) } } set_data(data, exclude=exclude, extra=extra, **kwargs) return data def create_parsed_full_event( i, code: EventCode, playlist_seed=None, track_seed=None, exclude=None, extra=None, with_date=True, with_image_url=False, country_code=None, top_country_code=None, **kwargs ): is_spotify = (i % 2) == 0 meta_data = meta(is_spotify, country_code=country_code, top_country_code=top_country_code) country_code = meta_data["country_code"][0] if is_spotify else None data = content( i, (code in [EventCode.ENTRY, EventCode.EXIT, EventCode.MAJOR_MOVE]), track_seed=track_seed, playlist_seed=playlist_seed, updated_key="updated_at", country_code=country_code, with_date=with_date, with_image_url=with_image_url, event_code=code ) data.update({ "id": i, **meta_data }) set_data(data, exclude=exclude, extra=extra, **kwargs) return data def pack_events(events): return { "Records": [ {"body": json.dumps({"Message": json.dumps(e, default=serialize_datetime)}, default=serialize_datetime)} for e in events ] }