def preview_media(self, show): preview = None if not show.media: return None for media in show.media: if media.fetch_url and (not preview or preview.play_count < media.play_count): preview = media return preview def safe_path(self, storage, name): try: return storage.path(name) except NotImplementedError: return None @classmethod def id(self): return "preview-extraction" @classmethod def depends_on(self): return ("media-extraction",) # register.processor(PreviewExtractorProcessor) extensions.register_artist_processor(MediaExtractionProcessor)
else: logger.debug( "[artist:%s] Profile parser: %s has never been run on profile: %s/%s" % (artist.id, parser.id(), profile.system_id, profile.profile_id) ) return True def merge_media(self, show, media): for m in media: if isinstance(m, AudioInfo): show.add_or_update_audio(m.get_audio()) elif isinstance(m, VideoInfo): show.add_or_update_video(m.get_video()) else: raise Exception("Unsupported media type: %s" % m.__class__) def cleanup(self, show, state): pass @classmethod def id(self): return "profile-parser" @classmethod def depends_on(self): return () extensions.register_artist_processor(ProfileParser)
for m in artist.media: plays_per_day = m.stats.stats_over(self.sample_start, self.sample_end).number_of_plays system_stat = self.stats().get(m.system_id) if plays_per_day != None and system_stat: media_info.append( ( ( plays_per_day - system_stat.plays_per_day) / system_stat.stddev ) ) media_info.sort(reverse = True) if media_info: logger.debug('Media: %s' % media_info) artist.rank = sum(media_info[0:3]) / len(media_info[0:3]) else: artist.rank = None return deepcopy(state) def cleanup(self, show, state): pass @classmethod def id(self): return 'ranking' @classmethod def depends_on(self): return ( )#'media-extraction', ) extensions.register_artist_processor(ArtistRanking)
from fancyashow.extensions import ExtensionLibrary, ArtistProcessor from fancyashow.processing.common import ResourceHandlerProcessorMixin extensions = ExtensionLibrary() class ArtistResourceHandler(ResourceHandlerProcessorMixin, ArtistProcessor): def resources(self, obj, state, dependent_states): resources = { } for key, profile_state in dependent_states.get('profile-parser', {}).iteritems(): for uri in profile_state['resources']: resources[uri] = True return resources.keys() def handlers(self): return [h() for h in self.library.artist_resource_handlers()] @classmethod def id(self): return 'resource-handler' @classmethod def depends_on(self): return ('profile-parser', ) extensions.register_artist_processor(ArtistResourceHandler)