def transform_function(self):
        if isinstance(self.final_field, TranslatedField):
            # If its a partial, it must have had a transformer applied - leave it alone!
            if isinstance(self.transform_function_func, functools.partial):

                return self.transform_function_func

            name = get_current_language()

            # Cloned in from django
            def transform(field, alias, *, name, previous):
                try:
                    wrapped = previous(field, alias)
                    return self.try_transform(wrapped, name)
                except FieldError:
                    # TODO: figure out how to handle this case as we don't have
                    # final_field or last_field_exception

                    # FieldError is raised if the transform doesn't exist.
                    # if isinstance(final_field, Field) and last_field_exception:
                    #     raise last_field_exception
                    # else:
                    #     raise
                    raise

            # -------------------

            return functools.partial(transform,
                                     name=name,
                                     previous=self.transform_function_func)

        return self.transform_function_func
예제 #2
0
 def __html__(self) -> str:
     # Add leading [lang] wrapped in a span
     text = self
     if not self.is_fallback:
         return text
     elif not self.fallback_language:
         return "??"
     else:
         current_lang = get_current_language()
         lang = self.fallback_language
         return f"""
    def get_fallback_text(cls, content):
        """Default fallback function that returns an error message"""
        language = get_current_language()
        lang_name = language.display_name(language)
        lang_en_name = language.display_name()

        return language, content.get(
            language.language,
            _(
                "No translation of this field available in %(lang_name)s"
                " [%(lang_en_name)s]."
            )
            % {
                "lang_name": lang_name,
                "lang_en_name": lang_en_name,
            },
        )
 def resolve_expression(self,
                        query=None,
                        allow_joins=True,
                        reuse=None,
                        summarize=False,
                        for_save=False):
     rhs = super().resolve_expression(query, allow_joins, reuse, summarize,
                                      for_save)
     if isinstance(rhs.field, TranslatedField):
         field_list = self.name.split("__")
         # TODO: should this always lookup lang
         if len(field_list) == 1:
             # Lookup current lang for one field
             field_list.extend([get_current_language()])
         for name in field_list[1:]:
             # Perform key lookups along path
             rhs = KeyTextTransform(name, rhs)
     return rhs
예제 #5
0
 def __init__(self, lhs, *args, **kwargs):
     tlhs = json.KeyTransform(
         str(get_current_language()),
         lhs,
     )
     super().__init__(tlhs, *args, **kwargs)
예제 #6
0
 def __init__(self, expression, string, **extra):
     lang = str(get_current_language())
     expression = KeyTextTransform(lang, expression)
     super().__init__(expression, string, **extra)
 def __init__(self, *args, **kwargs):
     super().__init__(get_current_language(), *args, **kwargs)