Coverage for src/ptf/cmds/dc_cmds.py: 0%
119 statements
« prev ^ index » next coverage.py v7.6.4, created at 2024-11-05 09:56 +0000
« prev ^ index » next coverage.py v7.6.4, created at 2024-11-05 09:56 +0000
1import datetime
2import re
4from ptf import exceptions
5from ptf import model_helpers
6from ptf.cmds import ptf_cmds
8from ..model_data import create_articledata
9from ..model_data import create_issuedata
10from ..model_data import create_publisherdata
11from .xml.dublin_core import data
13# TODO: derive from addCollectionXmlCmd and addArticleXmlCmd instead of recreating a class
16class addCollectionDc:
17 def __init__(self, journal, provider):
18 self.journal = journal
19 self.provider = provider
21 def do(self):
22 return self.internal_do()
24 def internal_do(self):
25 # Create a collection
26 col_params = {
27 "coltype": "journal",
28 "pid": self.journal,
29 "lang": "en",
30 "title_xml": self.journal,
31 "title_tex": self.journal,
32 "title_html": self.journal,
33 "trans_title_html": self.journal,
34 "trans_title_tex": self.journal,
35 "solr_commit": False,
36 "wall": 0,
37 }
39 collection = model_helpers.get_collection(self.journal)
40 cls = ptf_cmds.addCollectionPtfCmd if not collection else ptf_cmds.updateCollectionPtfCmd
41 cmd = cls(col_params)
42 cmd.set_provider(self.provider)
43 return cmd.do()
46class addArticleDc:
47 journal = None
48 xml_format = "data_dc"
49 provider = None
50 lang = "en"
51 eprint = False
52 thesis = False
53 source = None
55 def __init__(self, item):
56 self.item = item
57 self.update = True
59 def set_xml_format(self, xml_format):
60 self.xml_format = xml_format
62 def set_provider(self, provider):
63 self.provider = provider
65 def set_lang(self, lang):
66 self.lang = lang
68 def set_eprint(self, eprint):
69 self.eprint = eprint
71 def set_source(self, source):
72 self.source = source
74 def set_thesis(self, thesis):
75 self.thesis = thesis
77 def do(self):
78 return self.internal_do()
80 def internal_do(self):
81 article = data.Article(self.item, self.lang)
83 article_identifier = article.get_identifier()
84 reg_doi = re.compile("doi")
85 if reg_doi.search(article_identifier):
86 article_identifier = article_identifier.replace("doi:", "")
87 article_db = model_helpers.get_article(article_identifier)
89 # c = Collection.objects.filter(resourceid__in=[r])
91 # cmd = addCollectionDc(article.get_collection(), self.provider)
92 if article_db is not None:
93 container = article_db.my_container
95 self.journal = container.my_collection
97 if article_db is not None:
98 if self.update:
99 oai_article = None
100 if hasattr(article_db, "oai_article"):
101 oai_article = article_db.oai_article
102 cmd = ptf_cmds.addArticlePtfCmd(
103 {
104 "pid": article_db.pid,
105 "provider": article_db.provider,
106 "container": article_db.my_container,
107 }
108 )
109 cmd.set_provider(article_db.provider)
110 cmd.set_object_to_be_deleted(article_db)
111 cmd.undo()
112 if oai_article:
113 oai_article.delete()
114 else:
115 raise exceptions.ResourceExists("Article %s already exists" % article_db.pid)
117 year = article.get_date()
118 year = article.get_date().year if year else 0
119 pid = f"{self.journal.pid}_{year}"
120 issue = model_helpers.get_container(pid)
121 if issue is None:
122 xissue = create_issuedata()
123 xissue.pid = pid
124 xissue.ctype = "issue"
125 xissue.abstracts = article.get_abstract()
126 xissue.year = year
127 xissue.volume = article.get_volume()
128 xissue.number = article.get_volume_number()
129 xissue.last_modified_iso_8601_date_str = datetime.datetime.now().strftime(
130 "%Y-%m-%d %H:%M:%S"
131 )
133 cmd_container = ptf_cmds.addContainerPtfCmd({"xobj": xissue})
134 cmd_container.add_collection(self.journal)
135 cmd_container.set_provider(self.provider)
137 if article.get_publisher():
138 publisher = model_helpers.get_publisher(article.get_publisher())
139 if not publisher:
140 xpub = create_publisherdata()
141 xpub.name = article.get_publisher()
142 # publisher = cmd1a.do()
143 cmd = ptf_cmds.addPublisherPtfCmd({"xobj": xpub})
144 publisher = cmd.do()
145 cmd_container.set_publisher(publisher)
146 issue = cmd_container.do()
148 fpage, lpage = article.get_pages()
149 params = {
150 "title_xml": article.get_title(),
151 "title_html": article.get_title(),
152 "title_tex": article.get_title(),
153 "kwd_groups": [
154 {"content_type": "msc", "kwds": article.get_kwd(), "lang": article.get_lang()}
155 ],
156 "abstracts": article.get_abstract(),
157 "seq": 0,
158 "lang": article.get_lang(),
159 "fpage": fpage,
160 "lpage": lpage,
161 }
162 xarticle = create_articledata()
163 xarticle.date_published_iso_8601_date_str = article.get_date_str()
164 xarticle.title_xml = article.get_title()
165 xarticle.title_html = article.get_title()
166 xarticle.title_tex = article.get_title()
167 xarticle.pid = article_identifier
168 xarticle.kwd_groups = [
169 {"content_type": "msc", "kwds": article.get_kwd(), "lang": article.get_lang()}
170 ]
171 xarticle.seq = 0
172 xarticle.lang = article.get_lang()
173 xarticle.fpage = fpage
174 xarticle.lpage = lpage
175 cmd = ptf_cmds.addArticlePtfCmd({"xobj": xarticle})
176 cmd.set_eprint(self.eprint)
177 cmd.set_source(self.source)
178 cmd.set_thesis(self.thesis)
179 cmd.set_container(issue)
180 cmd.add_collection(self.journal)
181 article_db = cmd.do()
183 params = {
184 "rel": "link",
185 "mimetype": "application/html",
186 "location": article.get_link(),
187 "seq": 1,
188 "solr_commit": False,
189 "metadata": article.get_link(),
190 }
191 cmd = ptf_cmds.addExtLinkPtfCmd(params)
192 cmd.set_resource(article_db)
193 cmd.do()
195 return article_db