97-documentation/ns_report_publisher/model.py
from __future__ import annotations
from dataclasses import dataclass, field
from pathlib import Path
from typing import Any, Literal
@dataclass(frozen=True)
class SourceDocument:
path: Path
relative_path: Path
metadata: dict[str, str]
markdown: str
title: str
output_path: Path
@dataclass(frozen=True)
class ArtifactReference:
raw_reference: str
identifier: str
visible_label: str
href: str | None
status: Literal["resolved", "unresolved", "ambiguous"]
knowledge_kind: Literal["glossary", "learning-nugget"] | None = None
short_text: str = ""
detail_text: str = ""
topic: str = ""
term_type: str = ""
presentation_dimension: str = ""
artifact_type: str = ""
target_title: str = ""
@dataclass(frozen=True)
class ProcessingAnnotation:
kind: Literal["todo", "review"]
content: str
block: bool
@dataclass(frozen=True)
class ValidationFinding:
code: str
message: str
reference: str
@dataclass(frozen=True)
class ProcessedDocument:
source: SourceDocument
markdown: str
artifact_references: tuple[ArtifactReference, ...] = ()
processing_annotations: tuple[ProcessingAnnotation, ...] = ()
validation_findings: tuple[ValidationFinding, ...] = ()
@property
def path(self) -> Path:
return self.source.path
@property
def relative_path(self) -> Path:
return self.source.relative_path
@property
def metadata(self) -> dict[str, str]:
return self.source.metadata
@property
def title(self) -> str:
return self.source.title
@property
def output_path(self) -> Path:
return self.source.output_path
@dataclass
class NavigationNode:
name: str = ""
directories: dict[str, "NavigationNode"] = field(default_factory=dict)
documents: list[SourceDocument] = field(default_factory=list)
@dataclass(frozen=True)
class ArtifactTarget:
identifier: str
document: SourceDocument
priority: int = 0
source_kind: str = "artifact-id"
@dataclass
class PublicationContext:
source_root: Path
output_root: Path
documents: list[SourceDocument]
navigation: NavigationNode
artifact_targets: dict[str, list[ArtifactTarget]]
processed_documents: list[ProcessedDocument] = field(default_factory=list)
copied_assets: set[str] = field(default_factory=set)
unresolved_references: list[str] = field(default_factory=list)
ambiguous_references: list[str] = field(default_factory=list)
extra: dict[str, Any] = field(default_factory=dict)