Source code for submissions.models.plagiarism

__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"


from django.db import models
from django.urls import reverse

from ..constants import PLAGIARISM_STATUSES, STATUS_WAITING

from scipost.behaviors import TimeStampedModel


[docs]class iThenticateReport(TimeStampedModel): """iThenticate plagiarism report for a Submission.""" uploaded_time = models.DateTimeField(null=True, blank=True) processed_time = models.DateTimeField(null=True, blank=True) doc_id = models.IntegerField(primary_key=True) part_id = models.IntegerField(null=True, blank=True) percent_match = models.IntegerField(null=True, blank=True) status = models.CharField(max_length=16, choices=PLAGIARISM_STATUSES, default=STATUS_WAITING) class Meta: verbose_name = 'iThenticate Report' verbose_name_plural = 'iThenticate Reports' def __str__(self): """Summary of the iThenticateReport's meta information.""" _str = 'Report {doc_id}'.format(doc_id=self.doc_id) if hasattr(self, 'to_submission'): _str += ' on Submission {arxiv}'.format( arxiv=self.to_submission.preprint.identifier_w_vn_nr) return _str
[docs] def save(self, *args, **kwargs): """On save, touch the Submission's latest update timestamp.""" obj = super().save(*args, **kwargs) if hasattr(self, 'to_submission') and kwargs.get('commit', True): self.to_submission.touch() return obj
[docs] def get_absolute_url(self): """Return the url of the Submission's plagiarism report detail page.""" if hasattr(self, 'to_submission'): return reverse( 'submissions:plagiarism', kwargs={'identifier_w_vn_nr': self.to_submission.preprint.identifier_w_vn_nr}) return ''
[docs] def get_report_url(self): """Request and return new read-only url from the iThenticate API. Note: The read-only link is valid for only 15 minutes, saving may be worthless. """ if not self.part_id: return '' from ..plagiarism import iThenticate plagiarism = iThenticate() return plagiarism.get_url(self.part_id)
@property def score(self): """Return the iThenticate score returned by their API as saved in the database.""" return self.percent_match