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"))
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'))
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'))
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
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'])
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"])
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
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
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
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