Exemple #1
0
    def _parse_upload_status(self, data: dict) -> Upload:
        file_errors = defaultdict(list)
        non_file_errors = []
        for etype, filename, message in data['errors']:
            if filename:
                file_errors[filename].append(FileError(etype.upper(), message))
            else:
                non_file_errors.append(FileError(etype.upper(), message))

        return Upload(
            started=dateutil.parser.parse(data['start_datetime']),
            completed=dateutil.parser.parse(data['completion_datetime']),
            created=dateutil.parser.parse(data['created_datetime']),
            modified=dateutil.parser.parse(data['modified_datetime']),
            status=Upload.Status(data['upload_status']),
            lifecycle=Upload.LifecycleStates(data['workspace_state']),
            locked=bool(data['lock_state'] == 'LOCKED'),
            identifier=data['upload_id'],
            files=[
                FileStatus(name=fdata['name'],
                           path=fdata['public_filepath'],
                           size=fdata['size'],
                           file_type=fdata['type'],
                           modified=dateutil.parser.parse(
                               fdata['modified_datetime']),
                           errors=file_errors[fdata['public_filepath']])
                for fdata in data['files']
            ],
            errors=non_file_errors,
            compressed_size=data['upload_compressed_size'],
            size=data['upload_total_size'],
            checksum=data['checksum'],
            source_format=SubmissionContent.Format(data['source_format']))
Exemple #2
0
 def setUp(self):
     """We have a submission."""
     self.creator = User(native_id=1234, email='*****@*****.**')
     self.submission = Submission(
         submission_id=2347441,
         creator=self.creator,
         owner=self.creator,
         created=datetime.now(UTC),
         source_content=SubmissionContent(
             identifier='5678',
             source_format=SubmissionContent.Format('pdf'),
             checksum='a1b2c3d4',
             uncompressed_size=58493,
             compressed_size=58493
         )
     )
     self.submission.submitter_contact_verified = True
     self.submission.submitter_accepts_policy = True
     self.submission.license = License(name='foo', uri='http://foo.foo')
     self.submission.metadata = SubmissionMetadata(
         title='foo',
         abstract='oof',
         authors_display='Bloggs, J'
     )
     self.process = \
         ProposeCrossListFromPrimaryCategory(self.submission.submission_id)
Exemple #3
0
 def from_dict(cls: type, data: dict) -> 'Upload':
     """Instantiate an :class:`Upload` from a dict."""
     if 'files' in data:
         data['files'] = [FileStatus.from_dict(f) for f in data['files']]
     if 'errors' in data:
         data['errors'] = [FileError.from_dict(e) for e in data['errors']]
     for key in ['started', 'completed', 'created', 'modified']:
         if key in data and type(data[key]) is str:
             data[key] = dateutil.parser.parse(data[key])
     if 'source_format' in data:
         data['source_format'] = \
             SubmissionContent.Format(data['source_format'])
     instance: Upload = cls(**data)
     return instance
Exemple #4
0
 def setUp(self):
     """We have a submission."""
     self.creator = User(native_id=1234, email='*****@*****.**')
     self.submission = Submission(
         submission_id=2347441,
         creator=self.creator,
         owner=self.creator,
         created=datetime.now(UTC),
         source_content=SubmissionContent(
             identifier='5678',
             source_format=SubmissionContent.Format('pdf'),
             checksum='a1b2c3d4',
             uncompressed_size=58493,
             compressed_size=58493))
     self.process = CheckPDFSize(self.submission.submission_id)
Exemple #5
0
 def test_small_source(self):
     """The submission source content is quite small."""
     self.submission.source_content = SubmissionContent(
         identifier='5678',
         source_format=SubmissionContent.Format('pdf'),
         checksum='a1b2c3d4',
         uncompressed_size=593,
         compressed_size=53)
     trigger = Trigger(before=self.submission,
                       after=self.submission,
                       params={
                           'UNCOMPRESSED_PACKAGE_MAX_BYTES': 40_003_932,
                           'COMPRESSED_PACKAGE_MAX_BYTES': 3_039_303
                       })
     events = []
     self.process.check(None, trigger, events.append)
     self.assertEqual(len(events), 0, 'No events generated')
Exemple #6
0
 def test_huge_uncompressed_size(self):
     """The submission source is huge uncompressed."""
     self.submission.source_content = SubmissionContent(
         identifier='5678',
         source_format=SubmissionContent.Format('pdf'),
         checksum='a1b2c3d4',
         uncompressed_size=593_032_039,
         compressed_size=53)
     trigger = Trigger(before=self.submission,
                       after=self.submission,
                       params={
                           'UNCOMPRESSED_PACKAGE_MAX_BYTES': 40_003_932,
                           'COMPRESSED_PACKAGE_MAX_BYTES': 3_039_303
                       })
     events = []
     self.process.check(None, trigger, events.append)
     self.assertIsInstance(events[0], AddHold, 'Adds a hold')
     self.assertEqual(events[0].hold_type, Hold.Type.SOURCE_OVERSIZE)
Exemple #7
0
 def test_huge_previous_holds(self):
     """The submission has a hold, and this source content is too big."""
     self.submission.source_content = SubmissionContent(
         identifier='5678',
         source_format=SubmissionContent.Format('pdf'),
         checksum='a1b2c3d4',
         uncompressed_size=593_032_039,
         compressed_size=593_032_039)
     self.submission.holds['asdf1234'] = Hold(
         event_id='asdf1234',
         creator=self.creator,
         hold_type=Hold.Type.SOURCE_OVERSIZE)
     trigger = Trigger(before=self.submission,
                       after=self.submission,
                       params={
                           'UNCOMPRESSED_PACKAGE_MAX_BYTES': 40_003_932,
                           'COMPRESSED_PACKAGE_MAX_BYTES': 3_039_303
                       })
     events = []
     self.process.check(None, trigger, events.append)
     self.assertEqual(len(events), 0, 'Generates no holds')
Exemple #8
0
 def test_small_source_previous_hold(self):
     """The submission has a hold, but this source content is OK."""
     self.submission.source_content = SubmissionContent(
         identifier='5678',
         source_format=SubmissionContent.Format('pdf'),
         checksum='a1b2c3d4',
         uncompressed_size=593,
         compressed_size=53)
     self.submission.holds['asdf1234'] = Hold(
         event_id='asdf1234',
         creator=self.creator,
         hold_type=Hold.Type.SOURCE_OVERSIZE)
     trigger = Trigger(before=self.submission,
                       after=self.submission,
                       params={
                           'UNCOMPRESSED_PACKAGE_MAX_BYTES': 40_003_932,
                           'COMPRESSED_PACKAGE_MAX_BYTES': 3_039_303
                       })
     events = []
     self.process.check(None, trigger, events.append)
     self.assertIsInstance(events[0], RemoveHold, 'Removes a hold')
     self.assertEqual(events[0].hold_event_id, 'asdf1234')
     self.assertEqual(events[0].hold_type, Hold.Type.SOURCE_OVERSIZE)