Coverage for src/wiktextract/extractor/pl/etymology.py: 94%

44 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-07 00:55 +0000

1import re 

2from collections import defaultdict 

3 

4from wikitextprocessor.parser import NodeKind, WikiNode 

5 

6from ...page import clean_node 

7from ...wxr_context import WiktextractContext 

8from .models import WordEntry 

9 

10 

11def extract_etymology_section( 

12 wxr: WiktextractContext, 

13 page_data: list[WordEntry], 

14 base_data: WordEntry, 

15 level_node: WikiNode, 

16): 

17 from .page import match_sense_index 

18 

19 etymology_texts = defaultdict(list) 

20 etymology_links = defaultdict(list) 

21 has_list = False 

22 sense_index = "" 

23 for list_item in level_node.find_child_recursively(NodeKind.LIST_ITEM): 

24 e_nodes = [] 

25 for node in list_item.children: 

26 if isinstance(node, str): 

27 m = re.search(r"\(([\d\s,-.]+)\)", node) 

28 if m is not None: 

29 sense_index = m.group(1) 

30 remain_str = node[m.end() :] 

31 if remain_str != "": 31 ↛ 25line 31 didn't jump to line 25 because the condition on line 31 was always true

32 e_nodes.append(remain_str) 

33 else: 

34 e_nodes.append(node) 

35 else: 

36 e_nodes.append(node) 

37 links = [] 

38 text = clean_node(wxr, None, e_nodes, link_collector=links) 

39 if len(text) > 0: 39 ↛ 23line 39 didn't jump to line 23 because the condition on line 39 was always true

40 etymology_texts[sense_index].append(text) 

41 etymology_links[sense_index].extend(links) 

42 has_list = True 

43 if not has_list: 

44 links = [] 

45 text = clean_node(wxr, None, level_node.children, link_collector=links) 

46 if len(text) > 0: 46 ↛ 50line 46 didn't jump to line 50 because the condition on line 46 was always true

47 etymology_texts[sense_index].append(text) 

48 etymology_links[sense_index].extend(links) 

49 

50 for data in page_data: 

51 if data.lang_code == base_data.lang_code: 51 ↛ 50line 51 didn't jump to line 50 because the condition on line 51 was always true

52 for sense_index, texts in etymology_texts.items(): 

53 if sense_index == "" or match_sense_index(sense_index, data): 

54 data.etymology_texts = texts 

55 data.etymology_links = etymology_links[sense_index].copy() 

56 

57 base_data.etymology_texts = etymology_texts.get("", []) 

58 base_data.etymology_links = etymology_links.get("", []).copy()