"""ows-notifications functions.""" from activity_detector.base_config import FEED_ACCOUNT_TYPES from activity_detector.flows.spike_detector import config from activity_detector.utils import ows_notifications class SpikedTrack: """Represents a spiked track object.""" def __init__( self, label_id, label_name, track_name, artist_names, isrc, release_date, num_streams, num_streams_avg, percent_above_avg, image_url, store_name, recent_playlist_placements, subaccount_id=None, subaccount_name=None, country_code=None): """Init spike track.""" self.label_id = label_id self.subaccount_id = subaccount_id self.label_name = label_name self.subaccount_name = subaccount_name self.track_name = track_name self.artist_names = artist_names self.store_name = store_name self.isrc = isrc self.release_date = release_date self.num_streams = num_streams self.num_streams_avg = num_streams_avg self.percent_above_avg = percent_above_avg self.image_url = image_url self.recent_playlist_placements = recent_playlist_placements self.country_code = country_code class SpikeNotification: """Represent spike notification.""" def __init__( self, date, acc_id, spiked_tracks, label_name, subaccount_name=None, level='label'): """Init spike notifications.""" self.date = date self.acc_id = acc_id self.spiked_tracks = spiked_tracks self.label_name = label_name self.subaccount_name = subaccount_name self.level = level def send(self): """Send notification.""" if not self.spiked_tracks: return data = { 'feed_name': config.FEED_NAME, 'feed_id': '{acc_type}_{acc_id}'.format( acc_type=FEED_ACCOUNT_TYPES[self.level], acc_id=self.acc_id), 'payload': { 'actor': 'The Orchard Activity Detector', 'verb': 'Detected', 'object': 'Spike', 'date': self.date, 'account_type': self.level, 'label_name': ( self.label_name if self.level == 'label' else None), 'subaccount_name': ( self.subaccount_name if self.level == 'subaccount' else None), 'trending_tracks': [ { 'subaccount_name': ( track.subaccount_name if self.level == 'label' else None), 'track_name': track.track_name, 'artist_names': track.artist_names, 'store': track.store_name, 'isrc': track.isrc, 'release_date': track.release_date, 'image_url': track.image_url, 'num_streams': track.num_streams, 'num_streams_avg': track.num_streams_avg, 'percent_above_average': track.percent_above_avg, 'recent_playlist_placements': ( track.recent_playlist_placements), 'country_code': track.country_code } for track in self.spiked_tracks ] } } ows_notifications.create_notification(data)