Exemple #1
0
class NewsMLG2Formatter(BaseFormatter):

    MIMETYPE = 'application/vnd.iptc.g2.newsitem+xml'
    FILE_EXTENSION = 'xml'

    encoding = 'utf-8'
    formatter = NewsroomFormatter()
    nitf_formatter = NITFFormatter()

    def format_item(self, item, item_type='items'):
        item = item.copy()
        item.setdefault('guid', item['_id'])
        item.setdefault('_current_version', item['version'])
        item.setdefault('state', '')
        news_message = etree.Element(
            'newsMessage',
            attrib=self.formatter._debug_message_extra,
            nsmap=self.formatter._message_nsmap)
        self.formatter._format_header(item, news_message, '')
        item_set = self.formatter._format_item(news_message)
        news_item = self.formatter._format_item_set(item, item_set, 'newsItem')
        nitf = self.nitf_formatter.get_nitf(item, {}, '')
        self.formatter._format_content(item, news_item, nitf)
        return etree.tostring(news_message,
                              xml_declaration=True,
                              pretty_print=True,
                              encoding=self.encoding)
    def format(self, article, subscriber, codes=None):
        """Create article in NewsML G2 format

        :param dict article:
        :param dict subscriber:
        :param list codes: selector codes
        :return [(int, str)]: return a List of tuples. A tuple consist of
            publish sequence number and formatted article string.
        :raises FormatterError: if the formatter fails to format an article
        """
        try:
            self.subscriber = subscriber
            pub_seq_num = superdesk.get_resource_service('subscribers').generate_sequence_number(subscriber)
            is_package = self._is_package(article)
            news_message = etree.Element('newsMessage', attrib=self._debug_message_extra, nsmap=self._message_nsmap)
            self._format_header(article, news_message, pub_seq_num)
            item_set = self._format_item(news_message)
            if is_package:
                item = self._format_item_set(article, item_set, 'packageItem')
                self._format_groupset(article, item)
            elif article[ITEM_TYPE] in {CONTENT_TYPE.PICTURE, CONTENT_TYPE.AUDIO, CONTENT_TYPE.VIDEO}:
                item = self._format_item_set(article, item_set, 'newsItem')
                self._format_contentset(article, item)
            else:
                nitfFormater = NITFFormatter()
                nitf = nitfFormater.get_nitf(article, subscriber, pub_seq_num)
                newsItem = self._format_item_set(article, item_set, 'newsItem')
                self._format_content(article, newsItem, nitf)

            sd_etree.fix_html_void_elements(news_message)
            return [(pub_seq_num, self.XML_ROOT + etree.tostring(news_message, pretty_print=True).decode('utf-8'))]
        except Exception as ex:
            raise FormatterError.newmsmlG2FormatterError(ex, subscriber)
class NewsMLG2Formatter():

    encoding = 'utf-8'
    formatter = NewsroomFormatter()
    nitf_formatter = NITFFormatter()

    def format_filename(self, item):
        return '{}.xml'.format(item['_id'])

    def format_item(self, item):
        item = item.copy()
        item.setdefault('guid', item['_id'])
        item.setdefault('_current_version', item['version'])
        item.setdefault('state', '')
        news_message = etree.Element(
            'newsMessage',
            attrib=self.formatter._debug_message_extra,
            nsmap=self.formatter._message_nsmap)
        self.formatter._format_header(item, news_message, '')
        item_set = self.formatter._format_item(news_message)
        news_item = self.formatter._format_item_set(item, item_set, 'newsItem')
        nitf = self.nitf_formatter.get_nitf(item, {}, '')
        self.formatter._format_content(item, news_item, nitf)
        return etree.tostring(news_message,
                              xml_declaration=True,
                              pretty_print=True,
                              encoding=self.encoding)
Exemple #4
0
class NITFFormatter():

    encoding = 'utf-8'
    formatter = NITFFormatter()

    def format_filename(self, item):
        return '{}.xml'.format(item['_id'])

    def format_item(self, item):
        dest = {}
        nitf = self.formatter.get_nitf(item, dest, '')
        return etree.tostring(nitf, xml_declaration=True, pretty_print=True, encoding=self.encoding)
 def setUp(self):
     super().setUp()
     self.formatter = NITFFormatter()
     self.base_formatter = Formatter()
     init_app(self.app)