예제 #1
0
    def get_javascripts(self):
        publish = self.object
        story = publish.story
        article = story.article
        theme = self.get_theme()

        #try to get the cached javascript for this published story
        cached_scripts_key = 'ondemand:publish:js:%s' % (publish.id)
        if self.request.GET.get('refresh_cache', False):
            #invalidate on refresh_cache
            cache.delete(cached_scripts_key)
        script_ids = cache.get(cached_scripts_key, None)

        #cache empty, get the scripts and refill the cache
        if not script_ids:
            logger.debug("missed css cache on %s" % cached_scripts_key)

            playlist_filters = Q(base = True)

            if story.video_playlist:
                playlist_filters |= Q(mediaplaylisttemplate__videoplaylist__pk = story.video_playlist_id)

            if story.image_playlist:
                playlist_filters |= Q(mediaplaylisttemplate__imageplaylist__pk = story.image_playlist_id)

            if story.audio_playlist:
                playlist_filters |= Q(mediaplaylisttemplate__audioplaylist__pk = story.audio_playlist_id)

            if story.document_playlist:
                playlist_filters |= Q(mediaplaylisttemplate__documentplaylist__pk = story.document_playlist_id)

            if story.object_playlist:
                playlist_filters |= Q(mediaplaylisttemplate__objectplaylist__pk = story.object_playlist_id)

            scripts = Javascript.objects.filter(active=True, theme__id=theme.id).filter(
                playlist_filters |
                #inline finders
                Q(mediainlinetemplate__videotype__video__id__in=list(article.video_inlines.values_list('id', flat=True))) |
                Q(mediainlinetemplate__imagetype__image__id__in=list(article.image_inlines.values_list('id', flat=True))) |
                Q(mediainlinetemplate__audiotype__audio__id__in=list(article.audio_inlines.values_list('id', flat=True))) |
                Q(mediainlinetemplate__documenttype__document__id__in=list(article.document_inlines.values_list('id', flat=True))) |
                Q(mediainlinetemplate__objecttype__object__id__in=list(article.object_inlines.values_list('id', flat=True)))
            ).order_by('precedence')
            cache.set(cached_scripts_key, list(scripts.values_list('id', flat = True)), 60*20)
        else:
            scripts = Javascript.objects.filter(id__in=script_ids).order_by('precedence')

        #build a simple collection of styles
        script_collection = html_link_refs()
        for script in scripts:
            script_collection.add(script)

        return script_collection
예제 #2
0
def story_javascripts(story, theme, refresh_cache = False):
    article = story.article

    #try to get the cached javascript for this published story
    cached_scripts_key = 'theme:{0:d}:story:js:{1:d}'.format(story.id, theme.id)
    if refresh_cache:
        #invalidate on refresh_cache
        cache.delete(cached_scripts_key)
    script_ids = cache.get(cached_scripts_key, None)

    #cache empty, get the scripts and refill the cache
    if not script_ids:
        logger.debug("missed css cache on {0:>s}".format(cached_scripts_key))

        playlist_filters = Q(base = True)

        if story.video_playlist:
            playlist_filters |= Q(mediaplaylisttemplate__videoplaylist__pk = story.video_playlist_id)

        if story.image_playlist:
            playlist_filters |= Q(mediaplaylisttemplate__imageplaylist__pk = story.image_playlist_id)

        if story.audio_playlist:
            playlist_filters |= Q(mediaplaylisttemplate__audioplaylist__pk = story.audio_playlist_id)

        if story.document_playlist:
            playlist_filters |= Q(mediaplaylisttemplate__documentplaylist__pk = story.document_playlist_id)

        if story.object_playlist:
            playlist_filters |= Q(mediaplaylisttemplate__objectplaylist__pk = story.object_playlist_id)

        scripts = Javascript.objects.filter(active=True, theme__id=theme.id).filter(
            playlist_filters |
            #inline finders
            Q(mediainlinetemplate__videotype__video__id__in=list(article.video_inlines.values_list('id', flat=True))) |
            Q(mediainlinetemplate__imagetype__image__id__in=list(article.image_inlines.values_list('id', flat=True))) |
            Q(mediainlinetemplate__audiotype__audio__id__in=list(article.audio_inlines.values_list('id', flat=True))) |
            Q(mediainlinetemplate__documenttype__document__id__in=list(article.document_inlines.values_list('id', flat=True))) |
            Q(mediainlinetemplate__objecttype__object__id__in=list(article.object_inlines.values_list('id', flat=True)))
        ).order_by('precedence').distinct()
        cache.set(cached_scripts_key, list(scripts.values_list('id', flat = True)), 60*20)
    else:
        scripts = Javascript.objects.filter(id__in=script_ids).order_by('precedence')

    #build a simple collection of styles
    script_collection = html_link_refs()
    for script in scripts:
        script_collection.add(script)

    return script_collection
예제 #3
0
def story_stylesheets(story, theme, refresh_cache = False):
    article = story.article

    #try to get the cached css for this story / theme combination
    cached_css_key = 'theme:{0:d}:story:css:{1:d}'.format(story.id, theme.id)
    if refresh_cache:
        #invalidate on refresh_cache
        cache.delete(cached_css_key)
    styles = cache.get(cached_css_key, None)

    #cache empty, get the styles and refill the cache
    if not styles:
        logger.debug("missed css cache on {0:>s}".format(cached_css_key))

        playlist_filters = Q(base = True)

        if story.video_playlist:
            playlist_filters |= Q(mediaplaylisttemplate__videoplaylist__pk = story.video_playlist_id)
        if story.image_playlist:
            playlist_filters |= Q(mediaplaylisttemplate__imageplaylist__pk = story.image_playlist_id)
        if story.audio_playlist:
            playlist_filters |= Q(mediaplaylisttemplate__audioplaylist__pk = story.audio_playlist_id)
        if story.document_playlist:
            playlist_filters |= Q(mediaplaylisttemplate__documentplaylist__pk = story.document_playlist_id)
        if story.object_playlist:
            playlist_filters |= Q(mediaplaylisttemplate__objectplaylist__pk = story.object_playlist_id)

        styles = StyleSheet.objects.filter(active=True, theme__id=theme.id).filter(
            #playlist finders
            playlist_filters |
            #inline finders
            Q(mediainlinetemplate__videotype__video__id__in=list(article.video_inlines.values_list('id', flat=True))) |
            Q(mediainlinetemplate__imagetype__image__id__in=list(article.image_inlines.values_list('id', flat=True))) |
            Q(mediainlinetemplate__audiotype__audio__id__in=list(article.audio_inlines.values_list('id', flat=True))) |
            Q(mediainlinetemplate__documenttype__document__id__in=list(article.document_inlines.values_list('id', flat=True))) |
            Q(mediainlinetemplate__objecttype__object__id__in=list(article.object_inlines.values_list('id', flat=True)))
        ).order_by('precedence').distinct()
        cache.set(cached_css_key, styles, 60*10)

    #build a simple collection of styles
    css_collection = html_link_refs()
    for style in styles:
        css_collection.add(style)

    return css_collection