예제 #1
0
 def test_sanction_embargo_termination_first(self):
     embargo_termination_approval = factories.EmbargoTerminationApprovalFactory(
     )
     registration = Registration.find_one(
         Q('embargo_termination_approval', 'eq',
           embargo_termination_approval))
     assert registration.sanction == embargo_termination_approval
예제 #2
0
    def setUp(self):
        self.maxDiff = None
        super(TestRegistrationUpdate, self).setUp()
        self.user = AuthUserFactory()

        self.user_two = AuthUserFactory()
        self.user_three = AuthUserFactory()

        self.registration_approval = RegistrationApprovalFactory(state='unapproved', approve=False, user=self.user)
        self.unapproved_registration = Registration.find_one(Q('registration_approval', 'eq', self.registration_approval))
        self.unapproved_url = '/{}registrations/{}/'.format(API_BASE, self.unapproved_registration._id)

        self.public_project = ProjectFactory(title="Project One", is_public=True, creator=self.user)
        self.private_project = ProjectFactory(title="Project Two", is_public=False, creator=self.user)
        self.public_registration = RegistrationFactory(project=self.public_project, creator=self.user, is_public=True)
        self.private_registration = RegistrationFactory(project=self.private_project, creator=self.user)
        self.public_url = '/{}registrations/{}/'.format(API_BASE, self.public_registration._id)
        self.private_url = '/{}registrations/{}/'.format(API_BASE, self.private_registration._id)

        self.private_registration.add_contributor(self.user_two, permissions=[permissions.READ])
        self.private_registration.add_contributor(self.user_three, permissions=[permissions.WRITE])
        self.private_registration.save()

        self.payload = {
            "data": {
                "id": self.private_registration._id,
                "type": "registrations",
                "attributes": {
                    "public": True,
                }
            }
        }
예제 #3
0
 def test_sanction_embargo(self):
     embargo = factories.EmbargoFactory()
     registration = Registration.find_one(Q('embargo', 'eq', embargo))
     assert registration.sanction == embargo
예제 #4
0
 def test_sanction_registration_approval(self):
     registration_approval = factories.RegistrationApprovalFactory()
     registration = Registration.find_one(
         Q('registration_approval', 'eq', registration_approval))
     assert registration.sanction == registration_approval
예제 #5
0
 def unapproved_registration(self, registration_approval):
     return Registration.find_one(
         Q('registration_approval', 'eq', registration_approval))
예제 #6
0
 def test_sanction_retraction(self):
     retraction = factories.RetractionFactory()
     registration = Registration.find_one(Q('retraction', 'eq', retraction))
     assert registration.sanction == retraction
예제 #7
0
 def test_embargo_end_date(self):
     embargo = factories.EmbargoFactory()
     registration = Registration.find_one(Q('embargo', 'eq', embargo))
     assert registration.embargo_end_date == embargo.embargo_end_date
예제 #8
0
 def test_is_embargoed(self):
     embargo = factories.EmbargoFactory()
     registration = Registration.find_one(Q('embargo', 'eq', embargo))
     registration.embargo.state = Sanction.APPROVED
     registration.embargo.save()
     assert registration.is_embargoed
예제 #9
0
 def test_is_pending_retraction(self):
     retraction = factories.RetractionFactory()
     registration = Registration.find_one(Q('retraction', 'eq', retraction))
     assert retraction.is_pending_approval is True
     assert registration.is_pending_retraction is True
예제 #10
0
 def test_is_retracted(self):
     retraction = factories.RetractionFactory(state=Sanction.APPROVED,
                                              approve=True)
     registration = Registration.find_one(Q('retraction', 'eq', retraction))
     assert registration.is_retracted
예제 #11
0
 def test_is_registration_approved(self):
     registration_approval = factories.RegistrationApprovalFactory(state=Sanction.APPROVED, approve=True)
     registration = Registration.find_one(Q('registration_approval', 'eq', registration_approval))
     assert registration.is_registration_approved
예제 #12
0
 def test_is_retracted(self):
     retraction = factories.RetractionFactory(state=Sanction.APPROVED, approve=True)
     registration = Registration.find_one(Q('retraction', 'eq', retraction))
     assert registration.is_retracted
예제 #13
0
 def test_is_pending_registration(self):
     registration_approval = factories.RegistrationApprovalFactory()
     registration = Registration.find_one(Q('registration_approval', 'eq', registration_approval))
     assert registration_approval.is_pending_approval
     assert registration.is_pending_registration
예제 #14
0
 def test_sanction_registration_approval(self):
     registration_approval = factories.RegistrationApprovalFactory()
     registration = Registration.find_one(Q('registration_approval', 'eq', registration_approval))
     assert registration.sanction == registration_approval
예제 #15
0
 def test_sanction_embargo(self):
     embargo = factories.EmbargoFactory()
     registration = Registration.find_one(Q('embargo', 'eq', embargo))
     assert registration.sanction == embargo
예제 #16
0
 def test_is_pending_registration(self):
     registration_approval = factories.RegistrationApprovalFactory()
     registration = Registration.find_one(
         Q('registration_approval', 'eq', registration_approval))
     assert registration_approval.is_pending_approval
     assert registration.is_pending_registration
예제 #17
0
 def test_embargo_end_date(self):
     embargo = factories.EmbargoFactory()
     registration = Registration.find_one(Q('embargo', 'eq', embargo))
     assert registration.embargo_end_date == embargo.embargo_end_date
예제 #18
0
 def test_is_registration_approved(self):
     registration_approval = factories.RegistrationApprovalFactory(
         state=Sanction.APPROVED, approve=True)
     registration = Registration.find_one(
         Q('registration_approval', 'eq', registration_approval))
     assert registration.is_registration_approved
예제 #19
0
 def test_is_pending_embargo(self):
     embargo = factories.EmbargoFactory()
     registration = Registration.find_one(Q('embargo', 'eq', embargo))
     assert embargo.is_pending_approval
     assert registration.is_pending_embargo
예제 #20
0
 def test_is_pending_retraction(self):
     retraction = factories.RetractionFactory()
     registration = Registration.find_one(Q('retraction', 'eq', retraction))
     assert retraction.is_pending_approval is True
     assert registration.is_pending_retraction is True
예제 #21
0
 def test_is_embargoed(self):
     embargo = factories.EmbargoFactory()
     registration = Registration.find_one(Q('embargo', 'eq', embargo))
     registration.embargo.state = Sanction.APPROVED
     registration.embargo.save()
     assert registration.is_embargoed
예제 #22
0
 def test_is_pending_embargo(self):
     embargo = factories.EmbargoFactory()
     registration = Registration.find_one(Q('embargo', 'eq', embargo))
     assert embargo.is_pending_approval
     assert registration.is_pending_embargo
예제 #23
0
def main(dry_run=True):
    pending_embargoes = Embargo.find(Q('state', 'eq', Embargo.UNAPPROVED))
    for embargo in pending_embargoes:
        if should_be_embargoed(embargo):
            if dry_run:
                logger.warn('Dry run mode')
            parent_registration = Registration.find_one(
                Q('embargo', 'eq', embargo))
            logger.warn(
                'Embargo {0} approved. Activating embargo for registration {1}'
                .format(embargo._id, parent_registration._id))
            if not dry_run:
                if parent_registration.is_deleted:
                    # Clean up any registration failures during archiving
                    embargo.forcibly_reject()
                    embargo.save()
                    continue

                with transaction.atomic():
                    try:
                        embargo.state = Embargo.APPROVED
                        parent_registration.registered_from.add_log(
                            action=NodeLog.EMBARGO_APPROVED,
                            params={
                                'node':
                                parent_registration.registered_from._id,
                                'registration': parent_registration._id,
                                'embargo_id': embargo._id,
                            },
                            auth=None,
                        )
                        embargo.save()
                    except Exception as err:
                        logger.error(
                            'Unexpected error raised when activating embargo for '
                            'registration {}. Continuing...'.format(
                                parent_registration))
                        logger.exception(err)

    active_embargoes = Embargo.find(Q('state', 'eq', Embargo.APPROVED))
    for embargo in active_embargoes:
        if embargo.end_date < timezone.now():
            if dry_run:
                logger.warn('Dry run mode')
            parent_registration = Registration.find_one(
                Q('embargo', 'eq', embargo))
            logger.warn(
                'Embargo {0} complete. Making registration {1} public'.format(
                    embargo._id, parent_registration._id))
            if not dry_run:
                if parent_registration.is_deleted:
                    # Clean up any registration failures during archiving
                    embargo.forcibly_reject()
                    embargo.save()
                    continue

                with transaction.atomic():
                    try:
                        embargo.state = Embargo.COMPLETED
                        # Need to save here for node.is_embargoed to return the correct
                        # value in Node#set_privacy
                        embargo.save()
                        for node in parent_registration.node_and_primary_descendants(
                        ):
                            node.set_privacy('public', auth=None, save=True)
                        parent_registration.registered_from.add_log(
                            action=NodeLog.EMBARGO_COMPLETED,
                            params={
                                'node':
                                parent_registration.registered_from._id,
                                'registration': parent_registration._id,
                                'embargo_id': embargo._id,
                            },
                            auth=None,
                        )
                        embargo.save()
                    except Exception as err:
                        logger.error(
                            'Unexpected error raised when completing embargo for '
                            'registration {}. Continuing...'.format(
                                parent_registration))
                        logger.exception(err)
예제 #24
0
 def unapproved_registration(self, registration_approval):
     return Registration.find_one(Q('registration_approval', 'eq', registration_approval))
예제 #25
0
 def test_sanction_retraction(self):
     retraction = factories.RetractionFactory()
     registration = Registration.find_one(Q('retraction', 'eq', retraction))
     assert registration.sanction == retraction
예제 #26
0
def main(dry_run=True):
    pending_embargoes = Embargo.find(Q('state', 'eq', Embargo.UNAPPROVED))
    for embargo in pending_embargoes:
        if should_be_embargoed(embargo):
            if dry_run:
                logger.warn('Dry run mode')
            parent_registration = Registration.find_one(Q('embargo', 'eq', embargo))
            logger.warn(
                'Embargo {0} approved. Activating embargo for registration {1}'
                .format(embargo._id, parent_registration._id)
            )
            if not dry_run:
                if parent_registration.is_deleted:
                    # Clean up any registration failures during archiving
                    embargo.forcibly_reject()
                    embargo.save()
                    continue

                with transaction.atomic():
                    try:
                        embargo.state = Embargo.APPROVED
                        parent_registration.registered_from.add_log(
                            action=NodeLog.EMBARGO_APPROVED,
                            params={
                                'node': parent_registration.registered_from._id,
                                'registration': parent_registration._id,
                                'embargo_id': embargo._id,
                            },
                            auth=None,
                        )
                        embargo.save()
                    except Exception as err:
                        logger.error(
                            'Unexpected error raised when activating embargo for '
                            'registration {}. Continuing...'.format(parent_registration))
                        logger.exception(err)

    active_embargoes = Embargo.find(Q('state', 'eq', Embargo.APPROVED))
    for embargo in active_embargoes:
        if embargo.end_date < timezone.now():
            if dry_run:
                logger.warn('Dry run mode')
            parent_registration = Registration.find_one(Q('embargo', 'eq', embargo))
            logger.warn(
                'Embargo {0} complete. Making registration {1} public'
                .format(embargo._id, parent_registration._id)
            )
            if not dry_run:
                if parent_registration.is_deleted:
                    # Clean up any registration failures during archiving
                    embargo.forcibly_reject()
                    embargo.save()
                    continue

                with transaction.atomic():
                    try:
                        embargo.state = Embargo.COMPLETED
                        # Need to save here for node.is_embargoed to return the correct
                        # value in Node#set_privacy
                        embargo.save()
                        for node in parent_registration.node_and_primary_descendants():
                            node.set_privacy('public', auth=None, save=True)
                        parent_registration.registered_from.add_log(
                            action=NodeLog.EMBARGO_COMPLETED,
                            params={
                                'node': parent_registration.registered_from._id,
                                'registration': parent_registration._id,
                                'embargo_id': embargo._id,
                            },
                            auth=None,
                        )
                        embargo.save()
                    except Exception as err:
                        logger.error(
                            'Unexpected error raised when completing embargo for '
                            'registration {}. Continuing...'.format(parent_registration))
                        logger.exception(err)
예제 #27
0
 def test_sanction_embargo_termination_first(self):
     embargo_termination_approval = factories.EmbargoTerminationApprovalFactory()
     registration = Registration.find_one(Q('embargo_termination_approval', 'eq', embargo_termination_approval))
     assert registration.sanction == embargo_termination_approval