Skip to content

Commit

Permalink
Added compliance flag
Browse files Browse the repository at this point in the history
  • Loading branch information
ErnestaP committed Feb 22, 2024
1 parent afe4623 commit c784a1b
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 1 deletion.
21 changes: 21 additions & 0 deletions scoap3/articles/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class ComplianceReportAdmin(admin.ModelAdmin):
"check_arxiv_category",
"check_article_type",
"check_doi_registration_time",
"check_authors_affiliation",
"get_is_compliant",
"report_date",
]
Expand All @@ -50,6 +51,8 @@ class ComplianceReportAdmin(admin.ModelAdmin):
"check_article_type_description",
"check_doi_registration_time",
"check_doi_registration_time_description",
"check_authors_affiliation",
"check_authors_affiliation_description",
]
readonly_fields = [
"article",
Expand All @@ -65,6 +68,8 @@ class ComplianceReportAdmin(admin.ModelAdmin):
"check_article_type_description",
"check_doi_registration_time",
"check_doi_registration_time_description",
"check_authors_affiliation",
"check_authors_affiliation_description",
]

list_filter = [
Expand All @@ -77,6 +82,7 @@ class ComplianceReportAdmin(admin.ModelAdmin):
"article_id__report__check_arxiv_category",
"article_id__report__check_article_type",
"article_id__report__check_doi_registration_time",
"article_id__report__check_authors_affiliation",
]

actions = ["export_as_csv"]
Expand Down Expand Up @@ -154,6 +160,8 @@ class ArticleComplianceReportInline(admin.StackedInline):
"check_article_type_description",
"check_doi_registration_time",
"check_doi_registration_time_description",
"check_authors_affiliation",
"check_authors_affiliation_description",
]
can_delete = False
can_create = False
Expand All @@ -172,6 +180,10 @@ class ArticleComplianceReportInline(admin.StackedInline):
"check_doi_registration_time",
"check_doi_registration_time_description",
),
(
"check_authors_affiliation",
"check_authors_affiliation_description",
),
]
},
),
Expand Down Expand Up @@ -228,6 +240,7 @@ class ArticleAdmin(admin.ModelAdmin):
"check_arxiv_category",
"check_article_type",
"check_doi_registration_time",
"check_authors_affiliation",
"_updated_at",
"_created_at",
]
Expand All @@ -247,6 +260,7 @@ class ArticleAdmin(admin.ModelAdmin):
"report__check_arxiv_category",
"report__check_article_type",
"report__check_doi_registration_time",
"report__check_authors_affiliation",
]
inlines = [ArticleAuthorsInline, ArticleComplianceReportInline]

Expand Down Expand Up @@ -324,6 +338,13 @@ def check_doi_registration_time(self, obj):
return report.check_doi_registration_time
return False

@admin.display(description="Author affiliations", boolean=True)
def check_authors_affiliation(self, obj):
report = obj.report.first()
if report:
return report.check_authors_affiliation
return False


class ArticleIdentifierAdmin(admin.ModelAdmin):
list_display = ["article_id", "identifier_type", "identifier_value"]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 4.2.5 on 2024-02-21 14:46

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
("articles", "0013_compliancereport_check_article_type_description_and_more"),
]

operations = [
migrations.AddField(
model_name="compliancereport",
name="check_authors_affiliation",
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name="compliancereport",
name="check_authors_affiliation_description",
field=models.TextField(blank=True, default=""),
),
]
3 changes: 3 additions & 0 deletions scoap3/articles/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ class ComplianceReport(models.Model):
check_article_type_description = models.TextField(blank=True, default="")
check_doi_registration_time = models.BooleanField(default=False)
check_doi_registration_time_description = models.TextField(blank=True, default="")
check_authors_affiliation = models.BooleanField(default=False)
check_authors_affiliation_description = models.TextField(blank=True, default="")

def __str__(self):
return f"Compliance Report for {self.article.title} on {self.report_date.strftime('%Y-%m-%d')}"
Expand All @@ -113,5 +115,6 @@ def is_compliant(self):
self.check_arxiv_category,
self.check_article_type,
self.check_doi_registration_time,
self.check_authors_affiliation,
]
)
17 changes: 17 additions & 0 deletions scoap3/articles/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
from django_opensearch_dsl.registries import registry

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

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -122,6 +124,15 @@ def check_doi_registration_time(obj):
return False, "DOI not found in our system."


def check_authors_affiliation(article):
authors = Author.objects.filter(article_id=article)
for author in authors:
affiliations = Affiliation.objects.filter(author_id=author)
if len(affiliations) < 1:
return False, "Author does not have affiliations"
return True, "Authors' affiliations are compliant"


@shared_task(name="compliance_checks", acks_late=True)
def compliance_checks(article_id):
try:
Expand All @@ -145,6 +156,10 @@ def compliance_checks(article_id):
article
)
check_license_compliance, check_license_description = check_license(article)
(
check_affiliations_compliance,
check_affiliations_description,
) = check_authors_affiliation(article)

article.report.all().delete()

Expand All @@ -160,6 +175,8 @@ def compliance_checks(article_id):
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,
check_authors_affiliation_description=check_affiliations_description,
)
report.save()
logger.info("Compliance checks completed for article %s", article_id)
Expand Down
50 changes: 49 additions & 1 deletion scoap3/articles/tests/test_article_compliance.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,15 @@
ComplianceReport,
)
from scoap3.articles.tasks import compliance_checks
from scoap3.misc.models import ArticleArxivCategory, License, PublicationInfo, Publisher
from scoap3.authors.models import Author
from scoap3.misc.models import (
Affiliation,
ArticleArxivCategory,
Country,
License,
PublicationInfo,
Publisher,
)


@pytest.mark.django_db
Expand Down Expand Up @@ -147,6 +155,46 @@ def test_create_article_with_not_compliant_arxiv_category(self):
report = article.report.first()
self.assertEqual(report.check_arxiv_category, False)

def test_create_author_with_no_affiliation(self):
Author.objects.create(
article_id=self.article,
last_name="ExampleSurname",
first_name="ExampleName",
email="[email protected]",
author_order=100,
)
compliance_checks(self.article.id)
article = Article.objects.get(id=self.article.id)
report = article.report.first()
self.assertEqual(report.check_authors_affiliation, False)

def test_create_author_with_affiliation(self):
Author.objects.create(
article_id=self.article,
last_name="ExampleSurname",
first_name="ExampleName",
email="[email protected]",
author_order=100,
)
Country.objects.create(
code="BE",
name="Belgium",
)
author_id = (
Author.objects.get(last_name="ExampleSurname", first_name="ExampleName"),
)
affiliation = Affiliation.objects.create(
country=Country.objects.get(code="BE", name="Belgium"),
value="Example",
organization="Example Organization",
)
affiliation.author_id.set(author_id)

compliance_checks(self.article.id)
article = Article.objects.get(id=self.article.id)
report = article.report.first()
self.assertEqual(report.check_authors_affiliation, True)

def test_create_article_with_not_compliant_category_having_not_partial_journal(
self,
):
Expand Down

0 comments on commit c784a1b

Please sign in to comment.