2222from django .utils .translation import gettext , gettext_lazy
2323from lxml import etree
2424from lxml .etree import XMLSyntaxError
25- from pyparsing import ParseException
2625from translate .misc import quote
2726from translate .misc .multistring import multistring
2827from translate .misc .xml_helpers import setXMLspace
7473)
7574
7675if TYPE_CHECKING :
77- from collections .abc import Callable
76+ from collections .abc import Callable , Generator
7877
7978 from translate .storage .base import TranslationUnit as TranslateToolkitUnit
8079
@@ -180,19 +179,17 @@ def set_state(self, state) -> None:
180179 if hasattr (self .unit , "markapproved" ):
181180 self .unit .markapproved (state == STATE_APPROVED )
182181
183- @cached_property
184- def flags (self ):
182+ def get_extra_flags (self ) -> Generator [str | etree ._Element | Flags ]:
185183 """
186184 Return flags from unit.
187185
188- We currently extract maxwidth attribute .
186+ We currently extract from XML .
189187 """
190- flags = super ().flags
188+ yield from super ().get_extra_flags ()
191189 if hasattr (self .unit , "xmlelement" ):
192- flags . merge ( self .unit .xmlelement )
190+ yield self .unit .xmlelement
193191 if self .template is not None and hasattr (self .template , "xmlelement" ):
194- flags .merge (self .template .xmlelement )
195- return flags
192+ yield self .template .xmlelement
196193
197194 def clone_template (self ) -> None :
198195 super ().clone_template ()
@@ -577,6 +574,9 @@ def target(self):
577574class PoUnit (TTKitUnit ):
578575 """Wrapper for gettext PO unit."""
579576
577+ # Fuzzy flag is not useful, it is exposed as state instead
578+ remove_flags : ClassVar [list [str ]] = ["fuzzy" ]
579+
580580 def set_state (self , state ) -> None :
581581 """Set fuzzy /approved flag on translated unit."""
582582 super ().set_state (state )
@@ -585,17 +585,14 @@ def set_state(self, state) -> None:
585585 self .unit .prev_msgid_plural = []
586586 self .unit .prev_msgctxt = []
587587
588- @cached_property
589- def flags (self ):
590- """Return flags or typecomments from units."""
591- flags = super ().flags
592- try :
593- flags .merge (Flags (* self .mainunit .typecomments ))
594- except ParseException as error :
595- msg = f"Could not parse flags: { self .mainunit .typecomments !r} : { error } "
596- raise ValueError (msg ) from error
597- flags .remove ({"fuzzy" })
598- return flags
588+ def get_extra_flags (self ) -> Generator [str | etree ._Element | Flags ]:
589+ """
590+ Return flags from unit.
591+
592+ We currently extract from typecomments.
593+ """
594+ yield from super ().get_extra_flags ()
595+ yield from self .mainunit .typecomments
599596
600597 @cached_property
601598 def previous_source (self ):
@@ -847,6 +844,8 @@ def target(self):
847844class RichXliffUnit (XliffUnit ):
848845 """Wrapper unit for XLIFF with XML elements."""
849846
847+ add_flags : ClassVar [list [str ]] = ["xml-text" ]
848+
850849 @cached_property
851850 def source (self ):
852851 """Return source string from a Translate Toolkit unit."""
@@ -871,12 +870,6 @@ def target(self):
871870
872871 return rich_to_xliff_string (self .unit .rich_target )
873872
874- @cached_property
875- def flags (self ):
876- flags = super ().flags
877- flags .merge ("xml-text" )
878- return flags
879-
880873 def set_target (self , target : str | list [str ]) -> None :
881874 """Set translation unit target."""
882875 self ._invalidate_target ()
@@ -1021,7 +1014,7 @@ def flags(self):
10211014 # WebExtension placeholders
10221015 placeholder_ids = [f"${ key .upper ()} $" for key in placeholders ]
10231016 flags .merge ("case-insensitive" )
1024- flags .merge ( f "placeholders: { Flags .format_flag (placeholder_ids )} " )
1017+ flags .set_value ( "placeholders" , Flags .format_flag (placeholder_ids ))
10251018 return flags
10261019
10271020
0 commit comments