notification_state.py (3152B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\store\client\targetaudience\notification_state.py 2 from __future__ import absolute_import, division, print_function 3 import flatbuffers 4 from store.client.targetaudience.compat import to_text 5 from store.client.model.flatbuffer.offer_notification_state_generated import Dismissed, DismissedAddIsDismissed, DismissedEnd, DismissedStart, OfferAddNotificationState, OfferAddNotificationStateType, OfferAddOfferId, OfferEnd, OfferNotificationState, Offers, OffersAddOffers, OffersEnd, OffersStart, OffersStartOffersVector, OfferStart, Seen, SeenAddIsSeen, SeenEnd, SeenStart 6 STATE_UNSEEN = u'unseen' 7 STATE_SEEN = u'seen' 8 STATE_DISMISSED = u'dismissed' 9 _UNION_TYPE_BY_STATE = {STATE_SEEN: OfferNotificationState.Seen, 10 STATE_DISMISSED: OfferNotificationState.Dismissed} 11 12 def states_from_bytes(payload_bytes): 13 if not payload_bytes: 14 return {} 15 root = Offers.GetRootAs(payload_bytes, 0) 16 states = {} 17 for i in range(root.OffersLength()): 18 fb_offer = root.Offers(i) 19 offer_key = to_text(fb_offer.OfferId()) 20 state = _state_from_flatbuffer(fb_offer) 21 if offer_key and state != STATE_UNSEEN: 22 states[offer_key] = state 23 24 return states 25 26 27 def states_to_bytes(states): 28 builder = flatbuffers.Builder(0) 29 offer_offsets = [ _offer_to_flatbuffer(builder, offer_key, states[offer_key]) for offer_key in sorted(states) if states[offer_key] != STATE_UNSEEN ] 30 OffersStartOffersVector(builder, len(offer_offsets)) 31 for offset in reversed(offer_offsets): 32 builder.PrependUOffsetTRelative(offset) 33 34 offers_vector = builder.EndVector() 35 OffersStart(builder) 36 OffersAddOffers(builder, offers_vector) 37 builder.Finish(OffersEnd(builder)) 38 return builder.Output() 39 40 41 def _state_from_flatbuffer(fb_offer): 42 state_table = fb_offer.NotificationState() 43 if state_table is None: 44 return STATE_UNSEEN 45 state_type = fb_offer.NotificationStateType() 46 if state_type == OfferNotificationState.Seen: 47 seen = Seen() 48 seen.Init(state_table.Bytes, state_table.Pos) 49 if seen.IsSeen(): 50 return STATE_SEEN 51 return STATE_UNSEEN 52 if state_type == OfferNotificationState.Dismissed: 53 dismissed = Dismissed() 54 dismissed.Init(state_table.Bytes, state_table.Pos) 55 if dismissed.IsDismissed(): 56 return STATE_DISMISSED 57 return STATE_UNSEEN 58 return STATE_UNSEEN 59 60 61 def _offer_to_flatbuffer(builder, offer_key, state): 62 offer_id_offset = builder.CreateString(offer_key) 63 state_offset = _state_to_flatbuffer(builder, state) 64 OfferStart(builder) 65 OfferAddOfferId(builder, offer_id_offset) 66 OfferAddNotificationStateType(builder, _UNION_TYPE_BY_STATE[state]) 67 OfferAddNotificationState(builder, state_offset) 68 return OfferEnd(builder) 69 70 71 def _state_to_flatbuffer(builder, state): 72 if state == STATE_DISMISSED: 73 DismissedStart(builder) 74 DismissedAddIsDismissed(builder, True) 75 return DismissedEnd(builder) 76 SeenStart(builder) 77 SeenAddIsSeen(builder, True) 78 return SeenEnd(builder)