Skip to content

Commit

Permalink
is_compliant and check_file_formats
Browse files Browse the repository at this point in the history
Adapted check_file formats for each specific journal, altered is_compliant to pass for every publication date before 2023 and added mark as compliant action.
  • Loading branch information
Lorenzovagliano authored and pamfilos committed Oct 7, 2024
1 parent 27ef176 commit 47dbc15
Show file tree
Hide file tree
Showing 7 changed files with 185 additions and 45 deletions.
33 changes: 27 additions & 6 deletions scoap3/articles/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ class ComplianceReportAdmin(admin.ModelAdmin):
"compliant",
"check_license",
"check_required_file_formats",
"check_file_formats",
"check_arxiv_category",
"check_article_type",
"check_doi_registration_time",
Expand All @@ -46,8 +45,6 @@ class ComplianceReportAdmin(admin.ModelAdmin):
"check_license_description",
"check_required_file_formats",
"check_required_file_formats_description",
"check_file_formats",
"check_file_formats_description",
"check_arxiv_category",
"check_arxiv_category_description",
"check_article_type",
Expand All @@ -63,8 +60,6 @@ class ComplianceReportAdmin(admin.ModelAdmin):
"compliant",
"check_license",
"check_license_description",
"check_file_formats",
"check_file_formats_description",
"check_arxiv_category",
"check_arxiv_category_description",
"check_article_type",
Expand Down Expand Up @@ -231,6 +226,18 @@ def get_identifiers(self, obj):
)


def make_compliant(obj):
article = obj

reports = article.report.all()

for report in reports:
report.compliant = True
report.save()

return f"Articles marked as compliant {article.id}"


class ArticleAdmin(admin.ModelAdmin):
list_display = [
"id",
Expand All @@ -255,7 +262,7 @@ class ArticleAdmin(admin.ModelAdmin):
"publication_info__journal_title",
"article_identifiers__identifier_value",
]
actions = ["make_compliance_check"]
actions = ["make_compliance_check", "mark_as_compliant"]
list_filter = [
"report__compliant",
"_updated_at",
Expand Down Expand Up @@ -314,6 +321,20 @@ def make_compliance_check(self, request, queryset):
""",
)

@admin.action(description="Mark as compliant")
def mark_as_compliant(self, request, queryset):
ids = []
for obj in queryset:
make_compliant(obj)
ids.append(str(obj.id))
messages.success(
request,
f"""
Selected articles are being processed, it might take some time before seeing
the results in the reports. {', '.join(ids)}.
""",
)

@admin.display(boolean=True, description="Compliant")
def check_compliance(self, obj):
report = obj.report.first()
Expand Down
2 changes: 1 addition & 1 deletion scoap3/articles/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def get_metadata(self, obj):
return {
"_files": [
{
"filetype": entry.file.type,
"filetype": entry.filetype,
"size": entry.file.size,
"key": entry.file.name,
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Generated by Django 4.2.5 on 2024-09-30 09:02

from django.db import migrations


class Migration(migrations.Migration):
dependencies = [
("articles", "0016_compliancereport_check_required_file_formats_and_more"),
]

operations = [
migrations.RemoveField(
model_name="compliancereport",
name="check_file_formats",
),
migrations.RemoveField(
model_name="compliancereport",
name="check_file_formats_description",
),
]
17 changes: 17 additions & 0 deletions scoap3/articles/migrations/0018_articlefile_filetype.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Generated by Django 4.2.5 on 2024-10-03 12:44

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("articles", "0017_remove_compliancereport_check_file_formats_and_more"),
]

operations = [
migrations.AddField(
model_name="articlefile",
name="filetype",
field=models.TextField(blank=True, default=""),
),
]
10 changes: 8 additions & 2 deletions scoap3/articles/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import datetime
import mimetypes
from datetime import date

from django.db import models
from django.db.models.fields.files import FieldFile
Expand Down Expand Up @@ -71,6 +73,7 @@ class ArticleFile(models.Model):
file = CustomFileField(upload_to=article_file_upload_path)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
filetype = models.TextField(blank=True, default="")

def __str__(self) -> str:
return self.file.name
Expand Down Expand Up @@ -105,8 +108,6 @@ class ComplianceReport(models.Model):
check_license_description = models.TextField(blank=True, default="")
check_required_file_formats = models.BooleanField(default=False)
check_required_file_formats_description = models.TextField(blank=True, default="")
check_file_formats = models.BooleanField(default=False)
check_file_formats_description = models.TextField(blank=True, default="")
check_arxiv_category = models.BooleanField(default=False)
check_arxiv_category_description = models.TextField(blank=True, default="")
check_article_type = models.BooleanField(default=False)
Expand Down Expand Up @@ -136,6 +137,11 @@ def is_compliant(self):
):
_check_arxiv_category = self.check_arxiv_category

if isinstance(
self.article.publication_date, datetime.date
) and self.article.publication_date < date(2023, 1, 1):
return True

return all(
[
self.check_license,
Expand Down
58 changes: 29 additions & 29 deletions scoap3/articles/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from scoap3.articles.models import Article, ComplianceReport
from scoap3.authors.models import Author
from scoap3.misc.models import Affiliation
from scoap3.misc.models import Affiliation, PublicationInfo
from scoap3.misc.utils import fetch_doi_registration_date

logger = logging.getLogger(__name__)
Expand All @@ -27,34 +27,39 @@ def check_license(obj):


def check_required_file_formats(obj):
required_formats = ["pdf", "xml"]
available_formats = [
file.file.name.split(".")[-1] for file in obj.related_files.all()
]

missing_formats = [f for f in required_formats if f not in available_formats]

if missing_formats:
return (
False,
f"Missing required file formats: {', '.join(missing_formats)}.",
)
return True, "All required file formats are present."

publication_info = PublicationInfo.objects.filter(article_id=obj).first()

if not publication_info:
return False, "No publication information found."

journal_format_mapping = {
"Acta Physica Polonica B": ["pdf", "pdf/a"],
"Adv. High Energy Phys.": ["pdf", "pdf/a", "xml"],
"Prog. of Theor. and Exp. Phys.": ["pdf", "pdf/a", "xml"],
"European Physical Journal C": ["pdf/a", "xml"],
"Journal of High Energy Physics": ["pdf/a", "xml"],
"Nuclear Physics B": ["pdf", "pdf/a", "xml"],
"Physics Letters B": ["pdf", "pdf/a", "xml"],
"Physical review letters": ["pdf", "xml"],
"Physical review C": ["pdf", "xml"],
"Physical review D": ["pdf", "xml"],
"Chinese Physics C": ["pdf", "xml"],
}

default_required_formats = ["pdf", "pdf/a", "xml"]

required_formats = journal_format_mapping.get(
publication_info.journal_title, default_required_formats
)

def check_file_formats(obj):
required_formats = ["pdf", "pdf_a", "xml"]
available_formats = [
file.file.name.split(".")[-1] for file in obj.related_files.all()
]
available_formats = []
for file in obj.related_files.all():
available_formats.append(file.filetype)

missing_formats = [f for f in required_formats if f not in available_formats]

if missing_formats:
return (
False,
f"Missing required file formats: {', '.join(missing_formats)}.",
)
return False, f"Missing required file formats: {', '.join(missing_formats)}."
return True, "All required file formats are present."


Expand Down Expand Up @@ -172,9 +177,6 @@ def compliance_checks(article_id):
check_required_file_formats_compliance,
check_required_file_formats_description,
) = check_required_file_formats(article)
check_file_formats_compliance, check_file_formats_description = check_file_formats(
article
)
check_license_compliance, check_license_description = check_license(article)
(
check_affiliations_compliance,
Expand All @@ -193,8 +195,6 @@ def compliance_checks(article_id):
check_doi_registration_time_description=check_doi_registration_description,
check_required_file_formats=check_required_file_formats_compliance,
check_required_file_formats_description=check_required_file_formats_description,
check_file_formats=check_file_formats_compliance,
check_file_formats_description=check_file_formats_description,
check_license=check_license_compliance,
check_license_description=check_license_description,
check_authors_affiliation=check_affiliations_compliance,
Expand Down
Loading

0 comments on commit 47dbc15

Please sign in to comment.