Пример #1
0
def _check_for_sheet_error(sheet, expected_headers, processed_sheets=Ellipsis):

    if sheet.worksheet.title in processed_sheets:
        raise BulkAppTranslationsException(
            _('Sheet "%s" was repeated. Only the first occurrence has been '
              'processed.') % sheet.worksheet.title)

    if not expected_headers:
        raise BulkAppTranslationsException(
            _('Skipping sheet "%s", could not recognize title') %
            sheet.worksheet.title)

    num_required_headers = 0
    if is_modules_and_forms_sheet(sheet.worksheet.title):
        num_required_headers = 1  # type
    elif is_module_sheet(sheet.worksheet.title):
        num_required_headers = 2  # case property, list or detail
    elif is_form_sheet(sheet.worksheet.title):
        num_required_headers = 1  # label
    elif is_single_sheet(sheet.worksheet.title):
        num_required_headers = 4  # menu or form, case property, list or detail, label

    expected_required_headers = tuple(expected_headers[:num_required_headers])
    actual_required_headers = tuple(sheet.headers[:num_required_headers])
    if expected_required_headers != actual_required_headers:
        raise BulkAppTranslationsException(
            _('Skipping sheet {title}: expected first columns to be '
              '{expected}').format(
                  title=sheet.worksheet.title,
                  expected=", ".join(expected_required_headers)))
Пример #2
0
 def _get_text_node(self, translation_node, label_id):
     text_node = translation_node.find("./{f}text[@id='%s']" % label_id)
     if text_node.exists():
         return text_node
     raise BulkAppTranslationsException(
         _("Unrecognized translation label {0}. "
           "That row has been skipped").format(label_id))
Пример #3
0
 def _get_current_header_index(self, module_or_form_id, header):
     if module_or_form_id not in self.current_headers:
         raise BulkAppTranslationsException(
             _(f"Could not find a module or form with ID '{module_or_form_id}' in app '{self.app.name}'"
               ))
     for index, _column_name in enumerate(
             self.current_headers[module_or_form_id]):
         if _column_name == header:
             return index
Пример #4
0
    def _compare_sheet(self, module_or_form_id, uploaded_rows, for_type):
        """
        :param uploaded_rows: dict
        :param for_type: type of sheet, module_and_forms, module, form
        :return: diff generated by ghdiff or None
        """
        columns_to_compare = COLUMNS_TO_COMPARE[
            for_type] + self.lang_cols_to_compare
        header_indices = {
            column_name:
            self._get_current_header_index(module_or_form_id, column_name)
            for column_name in columns_to_compare
        }
        if None in header_indices.values():
            raise BulkAppTranslationsException(
                _("Could not find column(s) '{}'").format(", ".join(
                    [str(k) for k, v in header_indices.items() if v is None])))

        if module_or_form_id not in self.current_rows:
            return self._missing_module_or_form_diff(for_type)
        if self.lang_prefix + self.app.default_language in self.lang_cols_to_compare:
            current_rows = self._filter_rows(
                for_type, self.current_rows[module_or_form_id],
                module_or_form_id)
        else:
            current_rows = self.current_rows[module_or_form_id]

        parsed_current_rows = []
        parsed_uploaded_rows = []
        for current_row in current_rows:
            parsed_current_rows.append([
                current_row[header_indices[column_name]]
                for column_name in columns_to_compare
            ])
        for uploaded_row in uploaded_rows:
            parsed_uploaded_rows.append([
                uploaded_row.get(column_name)
                for column_name in columns_to_compare
            ])

        return self._generate_diff(parsed_current_rows, parsed_uploaded_rows)
Пример #5
0
 def _validate_sheet(self):
     lang_col = self.lang_prefix + self.lang_to_compare
     if lang_col not in self.uploaded_workbook.worksheets[0].fieldnames:
         raise BulkAppTranslationsException(
             _("Missing translations for {} in uploaded sheet").format(
                 self.lang_to_compare))
Пример #6
0
 def _check_for_shadow_form_error(self):
     if isinstance(self.form, ShadowForm):
         raise BulkAppTranslationsException(_('Form {index}, "{name}", is a shadow form. '
                  'Cannot translate shadow forms, skipping.').format(index=self.form.id + 1,
                                                                     name=self.form.default_name()))