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

52 statements  

« prev     ^ index     » next       coverage.py v7.12.0, created at 2025-12-11 14:57 +0000

1import logging 

2 

3from django.core.exceptions import ObjectDoesNotExist 

4from ptf.cmds.xml_cmds import ( 

5 addOrUpdateBookXmlCmd, 

6 addOrUpdateContainerXmlCmd, 

7 addOrUpdateIssueXmlCmd, 

8 importEntireCollectionXmlCmd, 

9) 

10from ptf.models import Container 

11 

12from crawler.models import ContainerSource 

13 

14logger = logging.getLogger(__name__) 

15 

16 

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

18 from crawler import factory 

19 

20 source_cls = factory.get_crawler_class(source_domain) 

21 if not source_cls: 

22 logger.warning( 

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

24 ) 

25 return False 

26 

27 source = source_cls.get_or_create_source() 

28 try: 

29 container.origin.delete() 

30 except ObjectDoesNotExist: 

31 pass 

32 ContainerSource.objects.get_or_create( 

33 source=source, 

34 container=container, 

35 ) 

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

37 return True 

38 

39 

40class addOrUpdateGDMLIssueXmlCmd(addOrUpdateIssueXmlCmd): 

41 def internal_do(self): 

42 obj = super().internal_do() 

43 if not obj or not self.xissue: 

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

45 return obj 

46 

47 source_str = self.xissue.source 

48 if not source_str: 

49 if not self.add_link_to_source: 

50 logger.debug( 

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

52 ) 

53 return obj 

54 source_str = "NUMDAM" 

55 

56 add_source_to_container(source_str, obj) 

57 return obj 

58 

59 

60class addOrUpdateGDMLBookXmlCmd(addOrUpdateBookXmlCmd): 

61 def internal_do(self): 

62 obj = super().internal_do() 

63 if not obj or not self.xbook: 

64 logger.debug( 

65 "Skipping source insertion : no database object was returned or xbook is None" 

66 ) 

67 return obj 

68 

69 source_str = self.xbook.source 

70 if not source_str: 

71 if not self.add_link_to_source: 

72 logger.debug( 

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

74 ) 

75 return obj 

76 source_str = "NUMDAM" 

77 

78 add_source_to_container(source_str, obj) 

79 return obj 

80 

81 

82class addOrUpdateGDMLContainerXmlCmd(addOrUpdateContainerXmlCmd): 

83 addOrUpdateIssueXmlCmdOverride = addOrUpdateGDMLIssueXmlCmd 

84 addOrUpdateBookXmlCmdOverride = addOrUpdateGDMLBookXmlCmd 

85 

86 

87importEntireCollectionXmlCmd.addOrUpdateContainerXmlCmdOverride = addOrUpdateGDMLContainerXmlCmd