Coverage for src/crawler/cmds/xml_cmds.py: 24%

48 statements  

« prev     ^ index     » next       coverage.py v7.9.0, created at 2025-07-30 09:47 +0000

1import logging 

2 

3from ptf.cmds.xml_cmds import ( 

4 addOrUpdateBookXmlCmd, 

5 addOrUpdateContainerXmlCmd, 

6 addOrUpdateIssueXmlCmd, 

7 importEntireCollectionXmlCmd, 

8) 

9from ptf.models import Container 

10 

11from crawler.models import ContainerSource 

12 

13logger = logging.getLogger(__name__) 

14 

15 

16def add_source_to_container(source_domain: str, container: Container): 

17 from crawler import factory 

18 

19 source_cls = factory.get_crawler_class(source_domain) 

20 if not source_cls: 

21 logger.warning( 

22 f"Couldn't insert source {source_domain} to container : source not implemented" 

23 ) 

24 return False 

25 

26 source = source_cls.get_or_create_source() 

27 ContainerSource.objects.get_or_create( 

28 source=source, 

29 container=container, 

30 ) 

31 logger.debug(f"Source {source_domain} successfully added to container {container.pid}") 

32 return True 

33 

34 

35class addOrUpdateGDMLIssueXmlCmd(addOrUpdateIssueXmlCmd): 

36 def internal_do(self): 

37 obj = super().internal_do() 

38 if not obj or not self.xissue: 

39 logger.debug("Skipping source insertion : database object or xissue is not set") 

40 return obj 

41 

42 source_str = self.xissue.source 

43 if not source_str: 

44 if not self.add_link_to_source: 

45 logger.debug( 

46 "Skipping source insertion : add_link_to_source is false and xissue.source is None" 

47 ) 

48 return obj 

49 source_str = "NUMDAM" 

50 

51 add_source_to_container(source_str, obj) 

52 return obj 

53 

54 

55class addOrUpdateGDMLBookXmlCmd(addOrUpdateBookXmlCmd): 

56 def internal_do(self): 

57 obj = super().internal_do() 

58 if not obj or not self.xbook: 

59 logger.debug( 

60 "Skipping source insertion : no database object was returned or xbook.source is not set" 

61 ) 

62 return obj 

63 

64 source_str = self.xbook.source 

65 if not source_str: 

66 if not self.add_link_to_source: 

67 logger.debug( 

68 "Skipping source insertion : add_link_to_source is false and xbook.source is None" 

69 ) 

70 return obj 

71 source_str = "NUMDAM" 

72 

73 add_source_to_container(source_str, obj) 

74 return obj 

75 

76 

77class addOrUpdateGDMLContainerXmlCmd(addOrUpdateContainerXmlCmd): 

78 addOrUpdateIssueXmlCmdOverride = addOrUpdateGDMLIssueXmlCmd 

79 addOrUpdateBookXmlCmdOverride = addOrUpdateGDMLBookXmlCmd 

80 

81 

82class importGDMLCollectionXmlCmd(importEntireCollectionXmlCmd): 

83 addOrUpdateContainerXmlCmdOverride = addOrUpdateGDMLContainerXmlCmd