コード例 #1
0
 def test_get_item_from_template(self):
     template = {
         "_id": "foo",
         "name": "test",
         "schedule_desk": "sports",
         "schedule_stage": "schedule",
         "data": {
             "headline": "Foo",
             "dateline": {
                 "located": {"city": "Sydney", "city_code": "Sydney", "tz": "Australia/Sydney"},
                 "date": "2015-10-10T10:10:10",
             },
         },
     }
     now = utcnow()
     with self.app.app_context():
         item = get_item_from_template(template)
     self.assertNotIn("_id", item)
     self.assertEqual("foo", item.get("template"))
     self.assertEqual("Foo", item.get("headline"))
     self.assertEqual(CONTENT_STATE.SUBMITTED, item.get(ITEM_STATE))
     self.assertEqual({"desk": "sports", "stage": "schedule"}, item.get("task"))
     dateline = item.get("dateline")
     self.assertEqual("Sydney", dateline["located"]["city"])
     self.assertEqual(now, dateline.get("date"))
     self.assertIn("SYDNEY", dateline.get("text"))
コード例 #2
0
 def test_get_item_from_template(self):
     template = {
         '_id': 'foo',
         'name': 'test',
         'schedule_desk': 'sports',
         'schedule_stage': 'schedule',
         'data': {
             'headline': 'Foo',
             'dateline': {
                 'located': {
                     'city': 'Sydney',
                     'city_code': 'Sydney',
                     'tz': 'Australia/Sydney'
                 },
                 'date': '2015-10-10T10:10:10',
             }
         }
     }
     now = utcnow()
     with self.app.app_context():
         item = get_item_from_template(template)
     self.assertNotIn('_id', item)
     self.assertEqual('foo', item.get('template'))
     self.assertEqual('Foo', item.get('headline'))
     self.assertEqual(CONTENT_STATE.SUBMITTED, item.get(ITEM_STATE))
     self.assertEqual({
         'desk': 'sports',
         'stage': 'schedule'
     }, item.get('task'))
     dateline = item.get('dateline')
     self.assertEqual('Sydney', dateline['located']['city'])
     self.assertEqual(now, dateline.get('date'))
     self.assertIn('SYDNEY', dateline.get('text'))
コード例 #3
0
 def test_get_item_from_template(self):
     template = {'_id': 'foo', 'name': 'test',
                 'schedule_desk': 'sports', 'schedule_stage': 'schedule',
                 'data': {
                     'headline': 'Foo',
                     'dateline': {
                         'located': {
                             'city': 'Sydney',
                             'city_code': 'Sydney',
                             'tz': 'Australia/Sydney'
                         },
                         'date': '2015-10-10T10:10:10',
                     }
                 }}
     now = utcnow()
     with self.app.app_context():
         item = get_item_from_template(template)
     self.assertNotIn('_id', item)
     self.assertEqual('foo', item.get('template'))
     self.assertEqual('Foo', item.get('headline'))
     self.assertEqual(CONTENT_STATE.SUBMITTED, item.get(ITEM_STATE))
     self.assertEqual({'desk': 'sports', 'stage': 'schedule'}, item.get('task'))
     dateline = item.get('dateline')
     self.assertEqual('Sydney', dateline['located']['city'])
     self.assertEqual(now, dateline.get('date'))
     self.assertIn('SYDNEY', dateline.get('text'))
コード例 #4
0
    def create(self, docs):
        ids = []
        production = get_resource_service('archive')
        for doc in docs:
            item_type = doc.pop('type')
            item_list = get_items(doc.pop('items', []), item_type)
            desk = get_resource_service('desks').find_one(req=None, _id=doc.pop('desk')) or {}
            article_template = doc.pop('article_template', None)
            if article_template:
                content_template = superdesk.get_resource_service('content_templates').find_one(
                    req=None, _id=article_template) or {}
            else:
                content_template = get_desk_template(desk)

            item = get_item_from_template(content_template)
            item[current_app.config['VERSION']] = 1
            item.setdefault('type', 'text')
            item.setdefault('slugline', 'Planning' if item_type == 'planning' else 'Event')
            item['task'] = {
                'desk': desk.get('_id'),
                'user': get_user_id(),
                'stage': desk.get('working_stage'),
            }
            item_from_template = generate_text_item(item_list, doc.pop('template', None), item_type)
            for key, val in item_from_template.items():
                placeholder = PLACEHOLDER_HTML if '_html' in key else PLACEHOLDER_TEXT
                if item.get(key) and placeholder in item[key]:
                    item[key] = item[key].replace(placeholder, val)
                else:
                    item[key] = val
            ids = production.post([item])
            insert_into_versions(doc=item)
            doc.update(item)
            ids.append(doc['_id'])
        return ids
コード例 #5
0
    def test_headline_strip_tags(self):
        template = {'data': {'headline': ' test\nit<br>'}}

        updates = render_content_template({}, template)
        self.assertEqual('test it', updates['headline'])

        item = get_item_from_template(template)
        self.assertEqual('test it', item['headline'])
コード例 #6
0
    def test_headline_strip_tags(self):
        template = {"data": {"headline": " test\nit<br>"}}

        updates = render_content_template({}, template)
        self.assertEqual("test it", updates["headline"])

        item = get_item_from_template(template)
        self.assertEqual("test it", item["headline"])
コード例 #7
0
    def test_headline_strip_tags(self):
        template = {'data': {'headline': ' test\nit<br>'}}

        updates = render_content_template({}, template)
        self.assertEqual('test it', updates['headline'])

        item = get_item_from_template(template)
        self.assertEqual('test it', item['headline'])
コード例 #8
0
    def create(self, docs, **kwargs):
        ids = []
        for doc in docs:
            item_type = doc.pop('type')
            item_list = get_items(doc.pop('items', []), item_type)
            desk = get_resource_service('desks').find_one(
                req=None, _id=doc.pop('desk')) or {}
            article_template = doc.pop('article_template', None)
            if article_template:
                content_template = get_resource_service(
                    'content_templates').find_one(req=None,
                                                  _id=article_template) or {}
            else:
                content_template = get_desk_template(desk)

            item = get_item_from_template(content_template)
            item[current_app.config['VERSION']] = 1
            item.setdefault('type', 'text')

            if item_type == 'planning':
                item.setdefault('slugline', 'Planning')
            elif item_type == 'event':
                item.setdefault('slugline', 'Event')
            else:
                item.setdefault('slugline', 'Events and Planning')

            item['task'] = {
                'desk': desk.get('_id'),
                'user': get_user_id(),
                'stage': desk.get('working_stage'),
            }
            item_from_template = generate_text_item(item_list,
                                                    doc.pop('template', None),
                                                    item_type)
            fields_to_override = []
            for key, val in item_from_template.items():
                if item.get(key):
                    fields_to_override.append(key)

                    placeholder = PLACEHOLDER_HTML if '_html' in key else PLACEHOLDER_TEXT
                    if placeholder in item[key]:
                        # The placeholder is found in the current field
                        # So replace {{content}} with the generated text
                        item[key] = item[key].replace(placeholder, val)
                    else:
                        # Otherwise append the generated text to the field
                        item[key] += val
                else:
                    item[key] = val

            item = create_item_from_template(item, fields_to_override)
            doc.update(item)
            ids.append(doc['_id'])
        return ids
コード例 #9
0
 def create(self, docs):
     ids = []
     production = superdesk.get_resource_service('archive')
     for doc in docs:
         planning_items = doc.pop('items', [])
         desk = superdesk.get_resource_service('desks').find_one(
             req=None, _id=doc.pop('desk'))
         template = get_desk_template(desk)
         item = get_item_from_template(template)
         item[current_app.config['VERSION']] = 1
         item.setdefault('type', 'text')
         item.setdefault('slugline', 'Planning')
         item['body_html'] = generate_body(planning_items)
         item['task'] = {
             'desk': desk['_id'],
             'user': get_user_id(),
             'stage': desk['working_stage'],
         }
         ids = production.post([item])
         insert_into_versions(doc=item)
         doc.update(item)
         ids.append(doc['_id'])
     return ids
コード例 #10
0
def get_item_from_assignment(assignment, template=None):
    """Get the item from assignment

    :param dict assignment: Assignment document
    :param string template string: name of template to use
    :return dict: item
    """
    item = {}
    if not assignment:
        return item

    desk_id = assignment.get('assigned_to').get('desk')
    desk = get_resource_service('desks').find_one(req=None, _id=desk_id)
    if template is not None:
        template = get_resource_service('content_templates').find_one(
            req=None, template_name=template)
    else:
        template = get_desk_template(desk)
    item = get_item_from_template(template)

    planning_data = assignment.get('planning') or {}
    slugline = planning_data.get('slugline')

    if slugline:
        item['slugline'] = slugline

    ednote = planning_data.get('ednote')

    planning_item = assignment.get('planning_item')
    # we now merge planning data if they are set
    if planning_item is not None:
        planning = get_resource_service('planning').find_one(req=None,
                                                             _id=planning_item)
        if planning is not None:
            for field in FIELDS_TO_COPY:
                if planning.get(field):
                    item[field] = deepcopy(planning[field])
            # when creating planning item from news item, we use headline for description_text
            # so we are doing the opposite here
            if assignment.get('description_text'):
                item['headline'] = planning['description_text']
            elif planning.get('headline'):
                item['headline'] = planning['headline']

            item.setdefault('flags', {}).update(planning.get('flags', {}))

    if ednote:
        item['ednote'] = ednote

    genre = planning_data.get('genre')
    if genre:
        item['genre'] = deepcopy(genre)

    keyword = planning_data.get('keyword', [])
    if len(keyword) > 0:
        item['keywords'] = keyword

    item['task'] = {
        'desk': desk['_id'],
        'user': get_user_id(),
        'stage': desk['working_stage'],
    }

    # Load default content profile of the desk to the item
    content_profile_id = template['data'].get(
        'profile', desk.get('default_content_profile', None))
    if content_profile_id:
        content_profiles = get_resource_service('content_types').find(
            {'_id': content_profile_id})
        # Pop those items not in the content_profile
        if content_profiles.count() > 0:
            content_profile = content_profiles.next()
            for key in content_profile.get('schema').keys():
                if content_profile['schema'][key] is None:
                    item.pop(key, None)

    return item
コード例 #11
0
def get_item_from_assignment(assignment, template=None):
    """Get the item from assignment

    :param dict assignment: Assignment document
    :param string template string: name of template to use
    :return dict: item
    """
    item = {}
    if not assignment:
        return item

    desk_id = assignment.get('assigned_to').get('desk')
    desk = get_resource_service('desks').find_one(req=None, _id=desk_id)
    if template is not None:
        template = get_resource_service('content_templates').find_one(
            req=None, template_name=template)
    else:
        template = get_desk_template(desk)
    item = get_item_from_template(template)

    planning_data = assignment.get('planning') or {}
    slugline = planning_data.get('slugline')
    language = planning_data.get('language')

    if slugline:
        item['slugline'] = slugline

    user = get_user()
    if user and user.get(BYLINE):
        item[BYLINE] = user[BYLINE]

    ednote = planning_data.get('ednote')

    planning_item = assignment.get('planning_item')
    # we now merge planning data if they are set
    if planning_item is not None:
        planning = get_resource_service('planning').find_one(req=None,
                                                             _id=planning_item)
        if planning is not None:
            for field in FIELDS_TO_COPY:
                if planning.get(field):
                    item[field] = deepcopy(planning[field])

            if assignment.get('description_text'):
                item['abstract'] = "<p>{}</p>".format(
                    assignment['description_text'])

            if planning.get('headline'):
                item['headline'] = planning['headline']

            if not item.get('flags'):
                item['flags'] = {}

            item['flags']['marked_for_not_publication'] = \
                (planning.get('flags') or {}).get('marked_for_not_publication') or False

    if ednote:
        item['ednote'] = ednote

    genre = planning_data.get('genre')
    if genre:
        item['genre'] = deepcopy(genre)

    keyword = planning_data.get('keyword', [])
    if len(keyword) > 0:
        item['keywords'] = keyword

    item['task'] = {
        'desk': desk['_id'],
        'user': get_user_id(),
        'stage': desk['working_stage'],
    }

    # Load default content profile of the desk to the item
    content_profile_id = template['data'].get(
        'profile', desk.get('default_content_profile', None))
    if content_profile_id:
        content_profiles = get_resource_service('content_types').find(
            {'_id': content_profile_id})
        # Pop those items not in the content_profile
        if content_profiles.count() > 0:
            content_profile = content_profiles.next()
            for key in content_profile.get('schema').keys():
                if content_profile['schema'][key] is None:
                    item.pop(key, None)

    # Apply the language after stripping non-content-profile fields
    # as the language field may not be in the content-profile
    if language:
        item['language'] = language

    return item