Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions article/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,10 +322,12 @@ def get(cls, pid_v2=None, sps_pkg_name=None, pid_v3=None):
return cls.objects.get(**params)

@classmethod
def get_first(cls, pid_v2=None, sps_pkg_name=None, pid_v3=None, delete=False):
def get_first(cls, pid_v2=None, sps_pkg_name=None, pid_v3=None, delete=False, name_list=None):
q = Q()
if pid_v2:
q |= Q(pid_v2=pid_v2)
if name_list:
q |= Q(sps_pkg__sps_pkg_name__in=name_list)
if sps_pkg_name:
q |= Q(sps_pkg__sps_pkg_name=sps_pkg_name)
qs = cls.objects.filter(q).order_by("-updated")
Expand Down Expand Up @@ -364,7 +366,12 @@ def create_or_update(cls, user, sps_pkg, issue=None, journal=None, position=None
raise ValueError(f"SPSPkg {sps_pkg} xml_with_pre is missing pid_v2")

try:
obj = cls.get_first(sps_pkg.sps_pkg_name, pid_v2, pid_v3, delete=True)
try:
name_list = self.xml_with_pre.pkg_name_variations
except AttributeError:
name_list = [self.xml_with_pre.sps_pkg_name]
name_list.extend(self.xml_with_pre.deprecated_sps_pkg_name_list)
obj = cls.get_first(sps_pkg.sps_pkg_name, pid_v2, pid_v3, delete=True, name_list=name_list)
except cls.DoesNotExist:
obj = cls()
obj.creator = user
Expand Down
2 changes: 2 additions & 0 deletions package/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -863,6 +863,8 @@ def upload_article_page_to_the_cloud(self, user, minio):
content = item["content"].encode("utf-8")
except KeyError:
content = None
if not content:
continue
response = self.upload_to_the_cloud(
user,
minio,
Expand Down
2 changes: 1 addition & 1 deletion requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ iso639-lang==2.6.3 # Mantendo versão maior
# SciELO Specific Packages
# ========================================
# Using specific versions for stability
-e git+https://github.com/scieloorg/packtools.git@4.16.8#egg=packtools
-e git+https://github.com/scieloorg/packtools.git@4.16.11#egg=packtools
-e git+https://github.com/scieloorg/scielo_scholarly_data#egg=scielo_scholarly_data
-e git+https://github.com/scieloorg/opac_schema.git@v2.66#egg=opac_schema
-e git+https://github.com/scieloorg/scielo_migration.git@1.10.8#egg=scielo_classic_website
Expand Down
62 changes: 32 additions & 30 deletions upload/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,14 @@ def report_datetime():
def upload_package_directory_path(instance, filename):
name, ext = os.path.splitext(filename)
try:
sps_pkg_name = instance.name
xml_name = instance.name
except AttributeError:
sps_pkg_name = instance.package.name
xml_name = instance.package.name

subdirs = (sps_pkg_name or name).split("-")
subdir_sps_pkg_name = "/".join(subdirs)
subdirs = (xml_name or name).split("-")
subdir_xml_name = "/".join(subdirs)

return f"upload/{subdir_sps_pkg_name}/{ext[1:]}/{filename}"
return f"upload/{subdir_xml_name}/{ext[1:]}/{filename}"


class PackageZip(CommonControlField):
Expand Down Expand Up @@ -148,7 +148,6 @@ def save_file(self, filename=None, content=None):
@property
def xmls(self):
for item in XMLWithPre.create(path=self.file.path):
logging.info(item.filename)
yield item.filename

def split(self, user):
Expand Down Expand Up @@ -440,20 +439,21 @@ def xml(self):
@property
def renditions(self):
"""
Retorna um gerador de itens com este formato
Retorna um lista de itens com este formato
{
"name": name,
"lang": item.language,
"component_type": "rendition",
"main": item.is_main_language,
"content": b'',
"sps_pkg_name": "dado ou construido ou ...",
"path_in_zip": "",
}
"""
renditions = self.xml_with_pre.renditions

with ZipFile(self.file.path) as zf:
for rendition in renditions:
rendition["content"] = zf.read(rendition["name"])
rendition["content"] = zf.read(rendition["path_in_zip"])
yield rendition

def files_list(self):
Expand Down Expand Up @@ -564,7 +564,8 @@ def process_system_decision(self, task_upload_workflow_publish_article):
detail = {"is_ready_to_publish": is_ready_to_publish}

response = self.prepare_to_publish(
user, qa=is_ready_to_preview, public=is_ready_to_publish
user, qa=is_ready_to_preview, public=is_ready_to_publish,
force_update=None
)
detail.update(response or {})

Expand Down Expand Up @@ -853,7 +854,7 @@ def process_qa_decision(

# é desejável que qa e public sejam publicados simultaneamente
# exceto se há impedimento de em tornar público
response = self.prepare_to_publish(user, qa, public)
response = self.prepare_to_publish(user, qa, public, True)
self.update_status_and_add_comments(
user, response.get("result"), response.get("new_status")
)
Expand Down Expand Up @@ -966,7 +967,11 @@ def xml_file_changed_pub_date(self, xml_with_pre):
Atualiza data de publicação do artigo e/ou pid v2, se necessário
"""
try:
xml_pub_date = datetime.fromisoformat(xml_with_pre.article_publication_date)
xml_pub_date = xml_with_pre.article_publication_date
except Exception as e:
xml_pub_date = xml_with_pre.get_complete_publication_date()
try:
xml_pub_date = datetime.fromisoformat(xml_pub_date)
except Exception as e:
xml_pub_date = None

Expand Down Expand Up @@ -1018,7 +1023,7 @@ def add_pid_v2(self, user, xml_with_pre):
)
raise

def prepare_sps_package(self, user, xml_with_pre, xml_file_changed):
def prepare_sps_package(self, user, xml_with_pre, xml_file_changed, force_update=None):
# Aplica-se também para um pacote de atualização de um conteúdo anteriormente migrado
# TODO components, texts
if xml_file_changed:
Expand All @@ -1030,14 +1035,14 @@ def prepare_sps_package(self, user, xml_with_pre, xml_file_changed):
or not self.sps_pkg
or not self.sps_pkg.registered_in_core
or not self.sps_pkg.valid_components
or force_update
):

texts = {
"xml_langs": list(xml_with_pre.langs),
"pdf_langs": [
rendition["lang"]
for rendition in xml_with_pre.renditions
if rendition["name"] in xml_with_pre.filenames
],
}
self.sps_pkg = SPSPkg.create_or_update(
Expand Down Expand Up @@ -1212,7 +1217,7 @@ def register_qa_comment_as_error(self, user, data=None):
report.creation = choices.REPORT_CREATION_DONE
report.save()

def prepare_to_publish(self, user, qa=None, public=None):
def prepare_to_publish(self, user, qa=None, public=None, force_update=None):
# verifica se há impedimentos de tornar o artigo público
detail = {"qa": qa, "public": public}
if not qa and not public:
Expand All @@ -1225,7 +1230,7 @@ def prepare_to_publish(self, user, qa=None, public=None):
xml_with_pre = self.xml_with_pre

xml_changed = self.check_xml_changed(user, xml_with_pre, public)
self.prepare_sps_package(user, xml_with_pre, xml_changed)
self.prepare_sps_package(user, xml_with_pre, xml_changed, force_update)
result = self.analyze_sps_package(qa, public, xml_changed)

detail.update(result)
Expand Down Expand Up @@ -2211,12 +2216,14 @@ class Meta:
]

@classmethod
def get(cls, pid_v2=None, pkg_name=None):
def get(cls, pid_v2=None, pkg_name=None, name_list=None):
params = {}
if pid_v2:
params["pid_v2"] = pid_v2
if pkg_name:
params["pkg_name"] = pkg_name
if name_list:
params["pkg_name__in"] = name_list
if not params:
raise ValueError("PidReservation.is_reserved requires params")
return cls.objects.get(**params)
Expand Down Expand Up @@ -2248,30 +2255,30 @@ def __init__(self, xml_with_pre):

def generate(self, user, journal, issue):
self.log = []
logging.info("PidV2Generator.generate PidProviderXML")
registered = PidProviderXML.is_registered(self.xml_with_pre)
if registered and registered.get("v2"):
self.log.append(_("Setting package.pid_v2 from PidProviderXML"))
return registered.get("v2")

logging.info("PidV2Generator.generate PidReservation")
try:
return PidReservation.get(pkg_name=self.xml_with_pre.sps_pkg_name).pid_v2
try:
name_list = self.xml_with_pre.pkg_name_variations
except AttributeError:
name_list = [self.xml_with_pre.sps_pkg_name]
name_list.extend(self.xml_with_pre.deprecated_sps_pkg_name_list)
return PidReservation.get(name_list=name_list).pid_v2
except PidReservation.DoesNotExist:
pass

logging.info("PidV2Generator.generate IssueProc")


self.issue_pid = self.get_issue_pid(user, journal, issue)
if not self.issue_pid:
self.log.append(
_(
"Unable to set package.pid_v2 because issue ({}) is not registered"
).format(self.issue)
).format(issue)
)
raise ValueError("Package.generate_pid_v2: Missing issue_pid")

logging.info("PidV2Generator.generate generate_pid_v2_from_metadata")
pid_v2 = self.generate_pid_v2_from_metadata()
# if not pid_v2:
# logging.info("PidV2Generator.generate get_random_pid_v2")
Expand All @@ -2282,10 +2289,8 @@ def generate(self, user, journal, issue):
f"Unable to get pid v2 for {self.xml_with_pre.sps_pkg_name}"
)

logging.info("PidV2Generator.generate reserve_pid_v2")
self.reserve_pid_v2(pid_v2)
if registered:
logging.info("PidV2Generator.generate update_pid_provider_v2")
self.update_pid_provider_v2(registered.get("v3"), pid_v2)

return pid_v2
Expand Down Expand Up @@ -2347,9 +2352,6 @@ def generate_pid_v2_from_metadata(self):
for name, source in sources:
if not source:
continue
logging.info(
f"PidV2Generator.generate generate_pid_v2_from_metadata {name}"
)
pid_v2 = self.generate_pid_v2_from_source(source)
if pid_v2:
self.log.append(_("Setting v2 ({}) from {}").format(pid_v2, name))
Expand Down