示例#1
0
def _process_rows(app, sheet_name, rows, names_map, lang=None):
    """
    Processes the rows of a worksheet of translations.

    This is the complement of get_bulk_app_sheets_by_name() and
    get_bulk_app_single_sheet_by_name(), from
    corehq/apps/translations/app_translations/download.py, which creates
    these worksheets and rows.

    :param app: The application being translated
    :param sheet_name: The tab name of the sheet being processed.
                       e.g. "menu1", "menu1_form1", or "Menus_and_forms"
    :param rows: The rows in the worksheet
    :param names_map: A map of sheet_name to module/form unique_id, used
                      to fetch a module/form even if it has been moved
                      since the worksheet was created
    :param lang: The language that the app is being translated into
    :return: A list of error messages or an empty list
    """
    if not sheet_name or not rows:
        return []

    if is_modules_and_forms_sheet(sheet_name):
        updater = BulkAppTranslationModulesAndFormsUpdater(app,
                                                           names_map,
                                                           lang=lang)
        return updater.update(rows)

    if is_module_sheet(sheet_name):
        unique_id = names_map.get(sheet_name)
        try:
            updater = BulkAppTranslationModuleUpdater(app,
                                                      sheet_name,
                                                      unique_id,
                                                      lang=lang)
        except ModuleNotFoundException:
            return [(messages.error,
                     _('Invalid menu in row "%s", skipping row.') % sheet_name)
                    ]
        return updater.update(rows)

    if is_form_sheet(sheet_name):
        unique_id = names_map.get(sheet_name)
        try:
            updater = BulkAppTranslationFormUpdater(app,
                                                    sheet_name,
                                                    unique_id,
                                                    lang=lang)
        except FormNotFoundException:
            return [(messages.error,
                     _('Invalid form in row "%s", skipping row.') % sheet_name)
                    ]
        return updater.update(rows)

    return [(messages.error,
             _('Did not recognize "%s", skipping row.') % sheet_name)]
示例#2
0
    def test_escape_output_value(self):
        test_cases = [
            ('hello', '<value>hello</value>'),
            ('abc < def > abc', '<value>abc &lt; def &gt; abc</value>'),
            ("bee's knees", "<value>bee's knees</value>"),
            ('unfortunate <xml expression', '<value>unfortunate &lt;xml expression</value>'),
            ('क्लिक', '<value>&#2325;&#2381;&#2354;&#2367;&#2325;</value>'),
            ('&#39', '<value>&amp;#39</value>'),
            ('question1 is <output value="/data/question1" vellum:value="#form/question1"/> !',
             '<value>question1 is &lt;output value="/data/question1" vellum:value="#form/question1"/&gt; !</value>'),
            ('Here is a ref <output value="/data/no_media"/> with some "trailing" text & that\'s some bad < xml.',
             '<value>Here is a ref &lt;output value="/data/no_media"/&gt; with some "trailing" text &amp; that\'s some bad &lt; xml.</value>')

        ]
        for input, expected_output in test_cases:
            escaped_input = BulkAppTranslationFormUpdater.escape_output_value(input)
            self.assertEqual(expected_output, etree.tostring(escaped_input).decode('utf-8'))
示例#3
0
    def test_escape_output_value(self):
        test_cases = [
            ('hello', '<value>hello</value>'),
            ('abc < def > abc', '<value>abc &lt; def &gt; abc</value>'),
            ("bee's knees", "<value>bee's knees</value>"),
            ('unfortunate <xml expression', '<value>unfortunate &lt;xml expression</value>'),
            ('क्लिक', '<value>&#2325;&#2381;&#2354;&#2367;&#2325;</value>'),
            ('&#39', '<value>&amp;#39</value>'),
            ('question1 is <output value="/data/question1" vellum:value="#form/question1"/> !',
             '<value>question1 is &lt;output value="/data/question1" vellum:value="#form/question1"/&gt; !</value>'),
            ('Here is a ref <output value="/data/no_media"/> with some "trailing" text & that\'s some bad < xml.',
             '<value>Here is a ref &lt;output value="/data/no_media"/&gt; with some "trailing" text &amp; that\'s some bad &lt; xml.</value>')

        ]
        for input, expected_output in test_cases:
            escaped_input = BulkAppTranslationFormUpdater.escape_output_value(input)
            self.assertEqual(expected_output, etree.tostring(escaped_input).decode('utf-8'))