Source code for atlas_doc_parser.nodes.node_decision_item
# -*- coding: utf-8 -*-importtypingasTimportdataclassesfromfunc_args.apiimportREQ,OPTfrom..type_enumimportTypeEnumfrom..mark_or_nodeimportBase,BaseNodefrom..markdown_helpersimportcontent_to_markdownifT.TYPE_CHECKING:# pragma: no coverfrom.node_textimportNodeTextfrom.node_dateimportNodeDatefrom.node_emojiimportNodeEmojifrom.node_hard_breakimportNodeHardBreakfrom.node_inline_cardimportNodeInlineCardfrom.node_mentionimportNodeMentionfrom.node_statusimportNodeStatusfrom.node_placeholderimportNodePlaceholderfrom.node_inline_extensionimportNodeInlineExtensionfrom.node_media_inlineimportNodeMediaInline
[docs]@dataclasses.dataclass(frozen=True)classNodeDecisionItemAttrs(Base):""" Attributes for :class:`NodeDecisionItem`. :param localId: A unique identifier for the decision item. :param state: The state of the decision (e.g., "DECIDED"). """localId:str=REQstate:str=REQ
[docs]@dataclasses.dataclass(frozen=True)classNodeDecisionItem(BaseNode):""" A single decision item within a decisionList. The decisionItem node represents a decision entry in a decision list. It contains inline content and has attributes for tracking its state. """type:str=TypeEnum.decisionItem.valueattrs:NodeDecisionItemAttrs=REQcontent:list[T.Union["NodeText","NodeDate","NodeEmoji","NodeHardBreak","NodeInlineCard","NodeMention","NodeStatus","NodePlaceholder","NodeInlineExtension","NodeMediaInline",]]=OPT
[docs]defto_markdown(self,ignore_error:bool=False,)->str:""" Convert the decision item to Markdown format. Each line is prefixed with ``>`` for blockquote formatting. Leading empty lines after the first content line are skipped, and consecutive empty lines are collapsed. """# Get raw content markdownitem_content=content_to_markdown(content=self.content,ignore_error=ignore_error,).rstrip()# Split into lines and prefix each with "> "raw_lines=item_content.split("\n")# Process lines:# 1. Skip empty lines that appear immediately after the first line# (the decision title line)# 2. Collapse consecutive empty lines# 3. Keep single empty lines between contentprefixed_lines=[]line_count=0# Count of non-empty content linesprev_was_empty=Falseforlineinraw_lines:line=line.rstrip()is_empty=notlineifis_empty:# Skip empty lines after only the first content line# (skip leading blanks after title)# Also skip consecutive empty linesifline_count<=1orprev_was_empty:continueprefixed_lines.append(">")prev_was_empty=Trueelse:prefixed_lines.append(f"> {line}")line_count+=1prev_was_empty=Falsereturn"\n".join(prefixed_lines)