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
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-11 14:57 +0000
1import logging
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
12from crawler.models import ContainerSource
14logger = logging.getLogger(__name__)
17def add_source_to_container(source_domain: str, container: Container):
18 from crawler import factory
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
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
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
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"
56 add_source_to_container(source_str, obj)
57 return obj
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
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"
78 add_source_to_container(source_str, obj)
79 return obj
82class addOrUpdateGDMLContainerXmlCmd(addOrUpdateContainerXmlCmd):
83 addOrUpdateIssueXmlCmdOverride = addOrUpdateGDMLIssueXmlCmd
84 addOrUpdateBookXmlCmdOverride = addOrUpdateGDMLBookXmlCmd
87importEntireCollectionXmlCmd.addOrUpdateContainerXmlCmdOverride = addOrUpdateGDMLContainerXmlCmd