Skip to content

Commit fb5629b

Browse files
Merge pull request #127 from robertatakenaka/revisa_licenca_corresp_data_artigo
Revisa os atributos de licenças e garante a criação no XML
2 parents dad1a60 + c32c5b4 commit fb5629b

5 files changed

Lines changed: 107 additions & 19 deletions

File tree

scielo_classic_website/isisdb/base_h_record.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -692,14 +692,16 @@ def any_issn(self):
692692
"v435", subfields={"_": "value", "t": "type"}, single=False, simple=False
693693
)
694694

695-
# generated by ModelBuilder
696695
@cached_property
697696
def permissions(self):
697+
return self.license_code
698+
699+
@cached_property
700+
def license_code(self):
698701
"""
699-
Permissions
700-
v540
702+
!v541!BY-NC
701703
"""
702-
return self.get_field_content("v540", subfields={}, single=True, simple=True)
704+
return self.get_field_content("v541", subfields={}, single=True, simple=True)
703705

704706
# generated by ModelBuilder
705707
@cached_property

scielo_classic_website/isisdb/base_issue_record.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,12 +337,33 @@ def is_marked_up(self):
337337
# generated by ModelBuilder
338338
@cached_property
339339
def permissions(self):
340+
return self.license_code
341+
342+
@cached_property
343+
def license_code(self):
340344
"""
341345
Permissions
342346
v541
343347
"""
344348
return self.get_field_content("v541", subfields={}, single=True, simple=True)
345349

350+
@cached_property
351+
def license_texts(self):
352+
"""
353+
Permissions
354+
v540 {'t': 'html', 'l': 'language'}
355+
!v540!^t<a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc/3.0/80x15.png" /></a> Todo el contenido de esta revista, excepto d�nde est� identificado, est&#225; bajo una <a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/">Licencia Creative Commons</a>^les
356+
!v540!^t<a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc/3.0/80x15.png" /></a> Todo o conte�do deste peri�dico, exceto onde est&#225 identificado, est&#225; licenciado sob uma <a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/">Licen&#231;a Creative Commons</a>^lpt
357+
!v540!^t<a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc/3.0/80x15.png" /></a> All the contents of this journal, except where otherwise noted, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/">Creative Commons Attribution License</a>^len
358+
!v541!BY-NC
359+
"""
360+
return self.get_field_content(
361+
"v540",
362+
subfields={"t": "html", "l": "language"},
363+
single=False,
364+
simple=False,
365+
)
366+
346367
# generated by ModelBuilder
347368
@cached_property
348369
def scielo_domain(self):

scielo_classic_website/isisdb/base_journal_record.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,12 +431,32 @@ def publisher_city(self):
431431
# generated by ModelBuilder
432432
@cached_property
433433
def permissions(self):
434+
return self.license_code
435+
436+
@cached_property
437+
def license_code(self):
434438
"""
435-
Permissions
436-
v541
439+
!v541!BY-NC
437440
"""
438441
return self.get_field_content("v541", subfields={}, single=True, simple=True)
439442

443+
@cached_property
444+
def license_texts(self):
445+
"""
446+
Permissions
447+
v540 {'t': 'html', 'l': 'language'}
448+
!v540!^t<a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc/3.0/80x15.png" /></a> Todo el contenido de esta revista, excepto d�nde est� identificado, est&#225; bajo una <a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/">Licencia Creative Commons</a>^les
449+
!v540!^t<a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc/3.0/80x15.png" /></a> Todo o conte�do deste peri�dico, exceto onde est&#225 identificado, est&#225; licenciado sob uma <a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/">Licen&#231;a Creative Commons</a>^lpt
450+
!v540!^t<a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc/3.0/80x15.png" /></a> All the contents of this journal, except where otherwise noted, is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc/3.0/">Creative Commons Attribution License</a>^len
451+
!v541!BY-NC
452+
"""
453+
return self.get_field_content(
454+
"v540",
455+
subfields={"t": "html", "l": "language"},
456+
single=False,
457+
simple=False,
458+
)
459+
440460
# generated by ModelBuilder
441461
@cached_property
442462
def previous_title(self):

scielo_classic_website/models/document.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import logging
22
from functools import cached_property
33

4+
from lxml import etree as ET
5+
46
from scielo_classic_website.htmlbody.html_body import BodyFromISIS
57
from scielo_classic_website.isisdb.c_record import ReferenceRecord
68
from scielo_classic_website.isisdb.h_record import DocumentRecord
@@ -269,8 +271,35 @@ def isis_created_date(self):
269271

270272
@property
271273
def permissions(self):
272-
# FIXME
273-
return {"url": "", "text": ""}
274+
return self.get_license("en")
275+
276+
def get_license(self, language):
277+
try:
278+
return self.license_texts[language]
279+
except KeyError:
280+
return None
281+
282+
@property
283+
def license_texts(self):
284+
languages = ("en", "es", "pt")
285+
license_code = self.h_record.license_code
286+
issue_licenses = self.issue.license_texts
287+
data = {}
288+
for language in languages:
289+
item = issue_licenses.get(language)
290+
if not item:
291+
continue
292+
item["code"] = license_code
293+
data.setdefault(language, item)
294+
try:
295+
text = f"<root>{item['html']}</root>"
296+
html = ET.fromstring(text)
297+
item["url"] = html.get("href")
298+
item["text"] = "".join(html.itertext())
299+
data[language] = item
300+
except Exception as e:
301+
logging.exception(e)
302+
return data
274303

275304
@property
276305
def authors_with_aff(self):

scielo_classic_website/spsxml/sps_xml_article_meta.py

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -550,30 +550,46 @@ class XMLArticleMetaPermissionPipe(plumber.Pipe):
550550
def precond(data):
551551
raw, xml = data
552552

553-
if not raw.permissions:
553+
if not raw.license_texts:
554554
raise plumber.UnmetPrecondition()
555555

556556
@plumber.precondition(precond)
557557
def transform(self, data):
558558
raw, xml = data
559559

560+
licenses = self.get_licenses(raw)
561+
if not licenses:
562+
return data
563+
560564
articlemeta = xml.find("./front/article-meta")
561-
562565
permissions = ET.Element("permissions")
563-
dlicense = ET.Element("license")
564-
dlicense.set("license-type", "open-access")
565-
dlicense.set("{http://www.w3.org/1999/xlink}href", raw.permissions["url"])
566-
dlicense.set("{http://www.w3.org/XML/1998/namespace}lang", "en")
567-
568-
licensep = ET.Element("license-p")
569-
licensep.text = raw.permissions["text"]
570566

571-
dlicense.append(licensep)
572-
permissions.append(dlicense)
567+
for language, url, text in licenses:
568+
dlicense = ET.Element("license")
569+
dlicense.set("license-type", "open-access")
570+
dlicense.set("{http://www.w3.org/1999/xlink}href", url)
571+
dlicense.set("{http://www.w3.org/XML/1998/namespace}lang", language)
572+
licensep = ET.Element("license-p")
573+
licensep.text = text
574+
dlicense.append(licensep)
575+
permissions.append(dlicense)
573576
articlemeta.append(permissions)
574577

575578
return data
576579

580+
def get_licenses(self, raw):
581+
data = []
582+
for language, item in raw.license_texts.items():
583+
url = item.get("url")
584+
if not url:
585+
code = (item.get("code") or "").lower()
586+
if not code:
587+
continue
588+
url = f"https://creativecommons.org/licenses/{code}/4.0/"
589+
if not url:
590+
continue
591+
data.append((language, url, item.get("text")))
592+
return data
577593

578594
class XMLArticleMetaSelfUriPipe(plumber.Pipe):
579595
"""Adiciona tag `self-uri` ao article-meta do artigo.

0 commit comments

Comments
 (0)