import json from datetime import timedelta from apollo_delphi_events.constants import EventType, EVENT_TYPE_TO_OUTPUT_CODE from tests.data.base import content from tests.data.utils import dt_now, serialize_datetime, set_data def event(i, event_type: EventType, j=None, k=None, country_code=None, top_country_code=None, serialize_dt=True, event_type_as_value=True, df="%Y-%m-%d %H:%M:%S.%f Z", dsp=None, exclude=None, extra=None): is_even = i % 2 == 0 created_dt = dt_now() - timedelta(minutes=(10 + i)) data = { "id": str(i), "app": f"app_{i}", "ttl": 3600, "created_at": serialize_datetime(created_dt, df=df) if serialize_dt else created_dt, "meta": { "domain": "playlist", "dsp": dsp or ("spotify" if is_even else "apple"), "type": "starred" if is_even else "top", "event_type": event_type.value if event_type_as_value else event_type, "country_code": country_code if country_code is not None else ["us"], "top_country_code": top_country_code if top_country_code is not None else ["us", "global"] }, "data": { "content": content( j or i, k, with_track=(event_type in [EventType.ADDITION, EventType.DROP, EventType.MAJOR_MOVE]), df=df, serialize_dt=serialize_dt) }, "publisher": { "owner": "delphi" } } return set_data(data, exclude=exclude, extra=extra) def pack_events(events): return { "Records": [ { "body": json.dumps( {"Message": json.dumps(e, default=serialize_datetime)}, default=serialize_datetime) } for e in events ] } ISO_FORMAT = "%Y-%m-%dT%H:%M:%S.%f" def output_event(i, event_type: EventType, j=None, k=None, country_code=None, top_country_code=None, exclude=None, extra=None): code = EVENT_TYPE_TO_OUTPUT_CODE[event_type] is_even = i % 2 == 0 data = { "external_id": str(i), "code": code, "ttl": 1800, "meta": { "dsp": "spotify" if is_even else "apple", "country_code": country_code if country_code is not None else ["us"], "top_country_code": top_country_code if top_country_code is not None else ["us", "global"] }, "data": { "content": content(j or i, k, with_track=(event_type is EventType.ADDITION), df=ISO_FORMAT) } } data["data"]["current_event_dt"] = serialize_datetime(dt_now() - timedelta(minutes=(10 + i)), df=ISO_FORMAT) return set_data(data, exclude=(exclude or []) + ["data.content.playlist.image_url"], extra=extra)