Coverage for src/qdrant_loader/connectors/confluence/mappers.py: 100%

27 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-09-08 06:05 +0000

1from __future__ import annotations 

2 

3from typing import Any 

4 

5 

6def extract_hierarchy_info(content: dict[str, Any]) -> dict[str, Any]: 

7 hierarchy_info = { 

8 "ancestors": [], 

9 "parent_id": None, 

10 "parent_title": None, 

11 "children": [], 

12 "depth": 0, 

13 "breadcrumb": [], 

14 } 

15 

16 ancestors = content.get("ancestors", []) 

17 if ancestors: 

18 ancestor_chain = [] 

19 breadcrumb = [] 

20 for ancestor in ancestors: 

21 ancestor_info = { 

22 "id": ancestor.get("id"), 

23 "title": ancestor.get("title"), 

24 "type": ancestor.get("type", "page"), 

25 } 

26 ancestor_chain.append(ancestor_info) 

27 breadcrumb.append(ancestor.get("title", "Unknown")) 

28 hierarchy_info["ancestors"] = ancestor_chain 

29 hierarchy_info["breadcrumb"] = breadcrumb 

30 hierarchy_info["depth"] = len(ancestor_chain) 

31 if ancestor_chain: 

32 immediate_parent = ancestor_chain[-1] 

33 hierarchy_info["parent_id"] = immediate_parent["id"] 

34 hierarchy_info["parent_title"] = immediate_parent["title"] 

35 

36 children_data = content.get("children", {}) 

37 if "page" in children_data: 

38 child_pages = children_data["page"].get("results", []) 

39 children_info = [] 

40 for child in child_pages: 

41 children_info.append( 

42 { 

43 "id": child.get("id"), 

44 "title": child.get("title"), 

45 "type": child.get("type", "page"), 

46 } 

47 ) 

48 hierarchy_info["children"] = children_info 

49 

50 return hierarchy_info