コード例 #1
0
    def get(self, path="film"):
        logging.info(path)

        path_mapping = immutable.make_dict({
            'film': container.for_id('6d84cd8d-d159-4e9a-ba2f-8852528d2d03'),
            'uk/opinion/v1': container.for_id('uk/commentisfree/regular-stories'),
            'film/v1': ds.FilmTodayLatestDataSource(mr.client),
        })

        if not path in path_mapping.keys():
            webapp2.abort(404, "Path {0} not mapped to a datasource".format(path))
            return

        stories_data_source = path_mapping[path]

        data_sources = {'stories': stories_data_source}
        priority_list = [('stories', 1)]
        template_data = {}
        retrieved_data = handlers.EmailTemplate.fetch_all(data_sources)
        trail_block = deduplication.build_unique_trailblocks(retrieved_data,priority_list)
        stories = trail_block.get('stories')

        headlines = [read_headline(s) for s in stories]
        if headlines:
            headline = headlines[0]
            template_data['headline'] = headline

        template = handlers.jinja_environment.get_template('headline.html')
        self.response.out.write(template.render(template_data))
コード例 #2
0
    def get(self, path="film"):
        logging.info(path)

        path_mapping = immutable.make_dict({
            'film':
            container.for_id('6d84cd8d-d159-4e9a-ba2f-8852528d2d03'),
            'uk/opinion/v1':
            container.for_id('uk/commentisfree/regular-stories'),
            'film/v1':
            ds.FilmTodayLatestDataSource(mr.client),
        })

        if not path in path_mapping.keys():
            webapp2.abort(404,
                          "Path {0} not mapped to a datasource".format(path))
            return

        stories_data_source = path_mapping[path]

        data_sources = {'stories': stories_data_source}
        priority_list = [('stories', 1)]
        template_data = {}
        retrieved_data = handlers.EmailTemplate.fetch_all(data_sources)
        trail_block = deduplication.build_unique_trailblocks(
            retrieved_data, priority_list)
        stories = trail_block.get('stories')

        headlines = [read_headline(s) for s in stories]
        if headlines:
            headline = headlines[0]
            template_data['headline'] = headline

        template = handlers.jinja_environment.get_template('headline.html')
        self.response.out.write(template.render(template_data))
コード例 #3
0
class FilmToday(handlers.EmailTemplate):
    recognized_versions = ['v1', 'v2', 'v3', 'v4']

    ad_tag = 'email-film-today'
    ad_config = immutable.make_dict({'leaderboard': 'Top'})

    film_today_latest = immutable.make_dict(
        {'film_today_latest': ds.FilmTodayLatestDataSource(client)})

    film_front = immutable.make_dict({
        'film_front':
        container.for_id('6d84cd8d-d159-4e9a-ba2f-8852528d2d03')
    })

    data_sources = immutable.make_dict({
        'v1': film_today_latest,
        'v2': film_front,
        'v3': film_today_latest,
        'v4': film_front,
    })

    priority_list = immutable.make_dict({
        'v1': [('film_today_latest', 10)],
        'v2': [('film_front', 10)],
        'v3': [('film_today_latest', 7)],
        'v4': [('film_front', 7)],
    })

    template_names = immutable.make_dict({
        'v1': 'culture/film-today/v1',
        'v2': 'culture/film-today/v2',
        'v3': 'culture/film-today/v3',
        'v4': 'culture/film-today/v4',
    })
コード例 #4
0
class CommentIsFree(handlers.EmailTemplate):
    recognized_versions = immutable.make_list('v1', 'v2', 'v3')

    ad_tag = 'email-speakers-corner'
    ad_config = {'leaderboard': 'Top'}

    ophan_client = OphanClient(mr.ophan_base_url, mr.ophan_key)
    most_shared_data_source = ds.MostSharedDataSource(
        most_shared_fetcher=MostSharedFetcher(ophan_client,
                                              section='commentisfree'),
        multi_content_data_source=ds.MultiContentDataSource(
            client=client, name='most_shared'),
        shared_count_interpolator=ds.MostSharedCountInterpolator())

    discussion_client = DiscussionClient(mr.discussion_base_url)
    most_commented_data_source = ds.MostCommentedDataSource(
        discussion_fetcher=DiscussionFetcher(discussion_client,
                                             'commentisfree'),
        multi_content_data_source=ds.MultiContentDataSource(
            client=client, name='most_commented'),
        comment_count_interpolator=ds.CommentCountInterpolator())

    data_sources = immutable.make_dict({
        'v1': {
            'uk_opinion_front':
            container.for_id('uk/commentisfree/regular-stories'),
            'cif_cartoon':
            ds.CommentIsFreeCartoonDataSource(client),
        },
        'v3': {
            'cif_most_shared': most_shared_data_source,
            'cif_cartoon': ds.CommentIsFreeCartoonDataSource(client),
        },
        'v2': {
            'cif_most_commented': most_commented_data_source,
            'cif_cartoon': ds.CommentIsFreeCartoonDataSource(client),
        }
    })

    priority_list = {
        'v3': [('cif_cartoon', 1), ('cif_most_shared', 5)],
        'v2': [('cif_cartoon', 1), ('cif_most_commented', 5)],
        'v1': [
            ('uk_opinion_front', 10),
            ('cif_cartoon', 1),
        ],
    }

    template_names = immutable.make_dict({
        'v3': 'comment-is-free/v3',
        'v2': 'comment-is-free/v2',
        'v1': 'comment-is-free/v1',
    })
コード例 #5
0
class Opinion(handlers.EmailTemplate):
    recognized_versions = ['v1', 'v2', 'v3']

    most_shared_data_source = ds.MostSharedDataSource(
        most_shared_fetcher=MostSharedFetcher(ophan_client,
                                              section='commentisfree',
                                              country='us'),
        multi_content_data_source=ds.MultiContentDataSource(
            client=mr.client, name='most_shared'),
        shared_count_interpolator=ds.MostSharedCountInterpolator(),
        result_decorator=partial(add_comment_counts, discussion_client))

    latest_us_opinion = dss.general.ItemDataSource('us/commentisfree',
                                                   production_office='us')

    data_sources = immutable.make_dict({
        'v1': {
            'cif_most_shared': most_shared_data_source,
        },
        'v2': {
            'cif_most_shared': most_shared_data_source,
            'us_opinion':
            container.for_id('us-alpha/contributors/feature-stories')
        },
        'v3': {
            'cif_most_shared': most_shared_data_source,
            'latest_us_opinion': latest_us_opinion,
        }
    })

    priority_list = immutable.make_dict({
        'v1': [
            ('cif_most_shared', 5),
        ],
        'v2': [
            ('us_opinion', 3),
            ('cif_most_shared', 5),
        ],
        'v3': [
            ('cif_most_shared', 2),
            ('latest_us_opinion', 3),
        ]
    })

    template_names = immutable.make_dict({
        'v1': 'us/opinion/v1',
        'v2': 'us/opinion/v2',
        'v3': 'us/opinion/v3',
    })
コード例 #6
0
class Bookmarks(handlers.EmailTemplate):

    recognized_versions = immutable.make_list('v1', 'v2')

    ad_tag = 'email-bookmarks'
    ad_config = immutable.make_dict({
        'leaderboard': 'Top',
        'leaderboard2': 'Bottom'
    })

    base_data_sources = immutable.make_dict({
        'books_picks':
        dss.culture.BooksEditorsPicks(client),
        'book_reviews':
        dss.culture.BookReviews(client),
        'books_blog':
        dss.culture.BooksBlog(client),
        'book_podcasts':
        dss.culture.BookPodcasts(client),
        'books_most_viewed':
        dss.culture.BooksMostViewed(client),
        'how_to_draw':
        dss.culture.HowToDraw(client),
    })

    data_sources = immutable.make_dict({
        'v1':
        base_data_sources,
        'v2':
        base_data_sources.using(talking_points=container.for_id(
            'c04946d0-6483-4b29-ad3c-37bd2e2058c8')),
    })

    priority_list = immutable.make_dict({
        'v1':
        immutable.make_list(('books_picks', 5), ('books_most_viewed', 3),
                            ('book_reviews', 3), ('books_blog', 3),
                            ('book_podcasts', 1), ('how_to_draw', 1)),
        'v2':
        immutable.make_list(('books_picks', 5), ('books_most_viewed', 3),
                            ('book_reviews', 3), ('talking_points', 6),
                            ('book_podcasts', 1), ('how_to_draw', 1)),
    })
    template_names = immutable.make_dict({
        'v1': 'culture/bookmarks/v1',
        'v2': 'culture/bookmarks/v2',
    })
コード例 #7
0
class Politics(handlers.EmailTemplate):
    recognized_versions = immutable.make_list('v1', 'v2', 'v3', 'v4')
    cache_bust = False

    ad_tag = 'email-australian-politics'
    ad_config = {}

    data_sources = immutable.make_dict({
        'v1': {
            'politics_latest': au.AustralianPoliticsDataSource(client),
            'politics_comment': au.AusCommentIsFreeDataSource(clientAUS),
            'politics_video': au.AustralianPoliticsVideoDataSource(client)
        },
        'v2': {
            'headlines':
            container.for_id('au-alpha/news/regular-stories',
                             sort_function=sorts.au.politics_first,
                             additional_capi_params=immutable.make_dict(
                                 {"show-tags": "keyword"})),
            'politics_comment':
            au.AusCommentIsFreeDataSource(clientAUS),
            'politics_video':
            au.AustralianPoliticsVideoDataSource(client),
        },
        'v3': {
            'politics_latest':
            au.AustralianPoliticsDataSource(client),
            'politics_most_popular':
            dss.mostPopular.mostPopularByTag(
                client, ophan_client, 'australia-news/australian-politics'),
            'politics_comment':
            au.AusCommentIsFreeDataSource(clientAUS),
            'politics_video':
            au.AustralianPoliticsVideoDataSource(client)
        },
        'v4': {
            'politics_latest':
            au.AustralianPoliticsDataSource(client),
            'politics_most_popular':
            dss.mostPopular.mostPopularByTag(
                client, ophan_client, 'australia-news/australian-politics'),
            'politics_comment':
            au.AusCommentIsFreeDataSourceLatest(clientAUS),
            'politics_video':
            au.AustralianPoliticsVideoDataSource(client)
        }
    })

    priority_list = {
        'v1': [('politics_comment', 1), ('politics_video', 1),
               ('politics_latest', 4)],
        'v2': [
            ('headlines', 4),
            ('politics_comment', 1),
            ('politics_video', 1),
        ],
        'v3': [
            ('politics_latest', 4),
            ('politics_most_popular', 4),
            ('politics_comment', 1),
            ('politics_video', 1),
        ],
        'v4': [
            ('politics_latest', 4),
            ('politics_most_popular', 4),
            ('politics_comment', 1),
            ('politics_video', 1),
        ]
    }

    template_names = immutable.make_dict({
        'v1': 'au/politics/v1',
        'v2': 'au/politics/v2',
        'v3': 'au/politics/v3',
        'v4': 'au/politics/v3'
    })
コード例 #8
0
ファイル: uk.py プロジェクト: seanpandrew/gu-email-renderer
class DailyEmail(handlers.EmailTemplate):
	recognized_versions = ['v1', 'v1-register', 'india', 'v2015', 'nhs', 'categories']

	ad_tag = 'email-guardian-today'
	ad_config = {
		'leaderboard_v1': 'Top',
		'leaderboard_v2': 'Bottom'
	}

	cache_bust=False

	base_data_sources = immutable.make_dict({
		'business': ds.BusinessDataSource(client),
		'technology': tech_data.TechnologyDataSource(client),
		'travel': ds.TravelDataSource(client),
		'lifeandstyle': ds.LifeAndStyleDataSource(client),
		'sport': ds.SportDataSource(client),
		'comment': ds.CommentIsFreeDataSource(client),
		'culture': ds.CultureDataSource(client),
		'top_stories': ds.TopStoriesDataSource(client),
		'eye_witness': ds.EyeWitnessDataSource(client),
		'most_viewed': ds.MostViewedDataSource(client),
		})

	data_sources = immutable.make_dict({
		'v1': base_data_sources,
		'v1-register': base_data_sources,
		'india': base_data_sources.using(
			india_recent = ds.IndiaDataSource(client),
			),
		'v2015': base_data_sources,
		'nhs': base_data_sources.using(
			nhs_special = container.for_id('346f91dc-60a5-41f1-a78e-513f6f379cec'),
			top_stories = container.for_id('uk-alpha/news/regular-stories')
			),
		'categories': base_data_sources.using(
			breaking = container.for_front('uk', 'breaking'),
			canonical = container.for_front('uk', 'canonical'),
			special = container.for_front('uk', 'special'),
		),
	})

	base_priorities = immutable.make_list(('top_stories', 6),
		('most_viewed', 6),
		('sport', 3), ('comment', 3), ('culture', 3),
		('business', 2), ('technology', 2), ('travel', 2),
		('lifeandstyle', 2), ('eye_witness', 1))

	priority_list = immutable.make_dict({
		'v1': base_priorities,
		'v1-register': base_priorities,
		'india': [('top_stories', 6), ('india_recent', 5), ('most_viewed', 6),
					('sport', 3), ('comment', 3), ('culture', 3),
					('business', 2), ('technology', 2), ('travel', 2),
					('lifeandstyle', 2), ('eye_witness', 1)],
		'v2015': base_priorities,
		'nhs': base_priorities.cons(('nhs_special', 2)),
		'categories': immutable.make_list(
			('breaking', 5),
			('canonical', 6),
			('special', 1),
			).concat(base_priorities.without(('top_stories', 6))),
		})

	template_names = immutable.make_dict({
		'v1': 'uk/daily/v1',
		'v1-register': 'uk/daily/v1-register',
		'india': 'uk/daily/india',
		'v2015': 'uk/daily/v2015',
		'nhs': 'uk/daily/nhs',
		'categories': 'uk/daily/categories',
	})

	def exclude_from_deduplication(self):
		return immutable.make_list('eye_witness')