Skip to content

Commit d6a5a7c

Browse files
committed
Snapshot
1 parent 844dc3e commit d6a5a7c

2 files changed

Lines changed: 16 additions & 4 deletions

File tree

src/docbuild/cli/cmd_metadata/metaprocess.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from ...constants import DEFAULT_DELIVERABLES
1717
from ...models.deliverable import Deliverable
1818
from ...models.doctype import Doctype
19-
from ...models.manifest import Description, Document, Manifest
19+
from ...models.manifest import Category, Description, Document, Manifest
2020
from ...utils.contextmgr import PersistentOnErrorTemporaryDirectory, edit_json
2121
from ...utils.git import ManagedGitRepo
2222
from ..context import DocBuildContext
@@ -347,19 +347,21 @@ def store_productdocset_json(
347347
docsetxpath = f"./{doctype.docset_xpath_segment(docset)}"
348348
docsetnode = productnode.find(docsetxpath)
349349
descriptions = list(Description.from_xml_node(productnode))
350+
categories = Category.from_xml_node(productnode)
350351

351352
manifest = Manifest(
352353
productname=productnode.find("name").text,
353354
acronym=product,
354355
version=docset,
355356
lifecycle=docsetnode.attrib.get("lifecycle") or "",
356357
descriptions=descriptions,
358+
categories=categories,
357359
# * hide-productname is False by default in the Manifest model
358360
# * archives are empty lists by default
359361
)
360362

361363
for f in files:
362-
stdout.print(f" {f}")
364+
stdout.print(f.stem)
363365
try:
364366
with (meta_cache_dir / f).open(encoding="utf-8") as fh:
365367
loaded_doc_data = json.load(fh)
@@ -393,6 +395,7 @@ def store_productdocset_json(
393395
log.info(
394396
"Wrote merged metadata JSON for %s/%s => %s", product, docset, jsonfile
395397
)
398+
stdout.print(f" > Result: {jsonfile}")
396399

397400

398401
async def process(

src/docbuild/models/manifest.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class CategoryTranslation(BaseModel):
5959
"""Represents a translation for a category title."""
6060

6161
lang: LanguageCode
62-
default: bool
62+
default: bool = Field(default=False)
6363
title: str
6464

6565
@field_serializer("lang")
@@ -71,9 +71,18 @@ def serialize_lang(self: Self, value: LanguageCode, info: SerializationInfo) ->
7171
class Category(BaseModel):
7272
"""Represents a category for a product/docset."""
7373

74-
id: str = Field(alias="categoryId")
74+
id: str = Field(serialization_alias="categoryId")
7575
translations: list[CategoryTranslation] = Field(default_factory=list)
7676

77+
@classmethod
78+
def from_xml_node(
79+
cls: type[Self], node: etree._Element
80+
) -> Generator[Self, None, None]:
81+
"""Extract categories from a parent XML node."""
82+
for cat in node.xpath("category|categories/category"):
83+
84+
yield cls(id=cat.attrib.get("categoryid", ""), translations=[])
85+
7786

7887
class Archive(BaseModel):
7988
"""Represents an archive (e.g., a ZIP file) for a product/docset."""

0 commit comments

Comments
 (0)