Beispiel #1
0
    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)
Beispiel #2
0
        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)
Beispiel #3
0
    
    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)
Beispiel #4
0
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)