예제 #1
0
 def test_is_registration_approved(self):
     registration_approval = factories.RegistrationApprovalFactory()
     registration = Node.find_one(
         Q('registration_approval', 'eq', registration_approval))
     with mock.patch('website.project.sanctions.Sanction.is_approved',
                     mock.Mock(return_value=True)):
         assert_true(registration.is_registration_approved)
예제 #2
0
    def _on_complete(self, user):
        from website.project.model import Node, NodeLog

        parent_registration = Node.find_one(Q('retraction', 'eq', self))
        parent_registration.registered_from.add_log(
            action=NodeLog.RETRACTION_APPROVED,
            params={
                'node': parent_registration._id,
                'retraction_id': self._id,
            },
            auth=Auth(self.initiated_by),
        )
        # Remove any embargoes associated with the registration
        if parent_registration.embargo_end_date or parent_registration.is_pending_embargo:
            parent_registration.embargo.state = self.REJECTED
            parent_registration.registered_from.add_log(
                action=NodeLog.EMBARGO_CANCELLED,
                params={
                    'node': parent_registration._id,
                    'embargo_id': parent_registration.embargo._id,
                },
                auth=Auth(self.initiated_by),
            )
            parent_registration.embargo.save()
        # Ensure retracted registration is public
        # Pass auth=None because the registration initiator may not be
        # an admin on components (component admins had the opportunity
        # to disapprove the retraction by this point)
        for node in parent_registration.node_and_primary_descendants():
            node.set_privacy('public', auth=None, save=True, log=False)
            node.update_search()
예제 #3
0
파일: sanctions.py 프로젝트: atelic/osf.io
    def _on_complete(self, user):
        from website.project.model import Node, NodeLog

        parent_registration = Node.find_one(Q('retraction', 'eq', self))
        parent_registration.registered_from.add_log(
            action=NodeLog.RETRACTION_APPROVED,
            params={
                'node': parent_registration.registered_from_id,
                'retraction_id': self._id,
                'registration': parent_registration._id
            },
            auth=Auth(self.initiated_by),
        )
        # Remove any embargoes associated with the registration
        if parent_registration.embargo_end_date or parent_registration.is_pending_embargo:
            parent_registration.embargo.state = self.REJECTED
            parent_registration.registered_from.add_log(
                action=NodeLog.EMBARGO_CANCELLED,
                params={
                    'node': parent_registration.registered_from_id,
                    'registration': parent_registration._id,
                    'embargo_id': parent_registration.embargo._id,
                },
                auth=Auth(self.initiated_by),
            )
            parent_registration.embargo.save()
        # Ensure retracted registration is public
        # Pass auth=None because the registration initiator may not be
        # an admin on components (component admins had the opportunity
        # to disapprove the retraction by this point)
        for node in parent_registration.node_and_primary_descendants():
            node.set_privacy('public', auth=None, save=True, log=False)
            node.update_search()
예제 #4
0
파일: sanctions.py 프로젝트: atelic/osf.io
    def _view_url_context(self, user_id, node):
        from website.project.model import Node

        registration = Node.find_one(Q('retraction', 'eq', self))
        return {
            'node_id': registration._id
        }
예제 #5
0
파일: sanctions.py 프로젝트: atelic/osf.io
    def _email_template_context(self, user, node, is_authorizer=False, urls=None):
        urls = urls or self.stashed_urls.get(user._id, {})
        registration_link = urls.get('view', self._view_url(user._id, node))
        if is_authorizer:
            from website.project.model import Node

            approval_link = urls.get('approve', '')
            disapproval_link = urls.get('reject', '')
            approval_time_span = settings.RETRACTION_PENDING_TIME.days * 24

            registration = Node.find_one(Q('retraction', 'eq', self))

            return {
                'is_initiator': self.initiated_by == user,
                'initiated_by': self.initiated_by.fullname,
                'project_name': registration.title,
                'registration_link': registration_link,
                'approval_link': approval_link,
                'disapproval_link': disapproval_link,
                'approval_time_span': approval_time_span,
            }
        else:
            return {
                'initiated_by': self.initiated_by.fullname,
                'registration_link': registration_link,
            }
예제 #6
0
    def _email_template_context(self,
                                user,
                                node,
                                is_authorizer=False,
                                urls=None):
        urls = urls or self.stashed_urls.get(user._id, {})
        registration_link = urls.get('view', self._view_url(user._id, node))
        if is_authorizer:
            from website.project.model import Node

            approval_link = urls.get('approve', '')
            disapproval_link = urls.get('reject', '')
            approval_time_span = settings.RETRACTION_PENDING_TIME.days * 24

            registration = Node.find_one(Q('retraction', 'eq', self))

            return {
                'is_initiator': self.initiated_by == user,
                'initiated_by': self.initiated_by.fullname,
                'project_name': registration.title,
                'registration_link': registration_link,
                'approval_link': approval_link,
                'disapproval_link': disapproval_link,
                'approval_time_span': approval_time_span,
            }
        else:
            return {
                'initiated_by': self.initiated_by.fullname,
                'registration_link': registration_link,
            }
예제 #7
0
 def test_sanction_embargo_termination_first(self):
     embargo_termination_approval = factories.EmbargoTerminationApprovalFactory(
     )
     registration = Node.find_one(
         Q('embargo_termination_approval', 'eq',
           embargo_termination_approval))
     assert_equal(registration.sanction, embargo_termination_approval)
예제 #8
0
파일: sanctions.py 프로젝트: kch8qx/osf.io
    def _approval_url_context(self, user_id):
        user_approval_state = self.approval_state.get(user_id, {})
        approval_token = user_approval_state.get("approval_token")
        if approval_token:
            from website.project.model import Node

            root_registration = Node.find_one(Q("retraction", "eq", self))
            node_id = user_approval_state.get("node_id", root_registration._id)
            return {"node_id": node_id, "token": approval_token}
예제 #9
0
파일: sanctions.py 프로젝트: kch8qx/osf.io
    def _on_reject(self, user):
        from website.project.model import Node, NodeLog

        parent_registration = Node.find_one(Q("retraction", "eq", self))
        parent_registration.registered_from.add_log(
            action=NodeLog.RETRACTION_CANCELLED,
            params={"node": parent_registration._id, "retraction_id": self._id},
            auth=Auth(user),
            save=True,
        )
예제 #10
0
    def __repr__(self):
        from website.project.model import Node

        parent_registration = None
        try:
            parent_registration = Node.find_one(Q('retraction', 'eq', self))
        except NoResultsFound:
            pass
        return ('<Retraction(parent_registration={0}, initiated_by={1}) '
                'with _id {2}>').format(parent_registration, self.initiated_by,
                                        self._id)
예제 #11
0
파일: sanctions.py 프로젝트: kch8qx/osf.io
    def __repr__(self):
        from website.project.model import Node

        parent_registration = None
        try:
            parent_registration = Node.find_one(Q("retraction", "eq", self))
        except NoResultsFound:
            pass
        return ("<Retraction(parent_registration={0}, initiated_by={1}) " "with _id {2}>").format(
            parent_registration, self.initiated_by, self._id
        )
예제 #12
0
파일: sanctions.py 프로젝트: kch8qx/osf.io
    def __repr__(self):
        from website.project.model import Node

        parent_registration = None
        try:
            parent_registration = Node.find_one(Q("embargo", "eq", self))
        except NoResultsFound:
            pass
        return ("<Embargo(parent_registration={0}, initiated_by={1}, " "end_date={2}) with _id {3}>").format(
            parent_registration, self.initiated_by, self.end_date, self._id
        )
예제 #13
0
파일: sanctions.py 프로젝트: atelic/osf.io
    def _approval_url_context(self, user_id):
        user_approval_state = self.approval_state.get(user_id, {})
        approval_token = user_approval_state.get('approval_token')
        if approval_token:
            from website.project.model import Node

            root_registration = Node.find_one(Q('retraction', 'eq', self))
            node_id = user_approval_state.get('node_id', root_registration._id)
            return {
                'node_id': node_id,
                'token': approval_token,
            }
예제 #14
0
    def __repr__(self):
        from website.project.model import Node

        parent_registration = None
        try:
            parent_registration = Node.find_one(Q('embargo', 'eq', self))
        except NoResultsFound:
            pass
        return ('<Embargo(parent_registration={0}, initiated_by={1}, '
                'end_date={2}) with _id {3}>').format(parent_registration,
                                                      self.initiated_by,
                                                      self.end_date, self._id)
예제 #15
0
    def _approval_url_context(self, user_id):
        user_approval_state = self.approval_state.get(user_id, {})
        approval_token = user_approval_state.get('approval_token')
        if approval_token:
            from website.project.model import Node

            root_registration = Node.find_one(Q('retraction', 'eq', self))
            node_id = user_approval_state.get('node_id', root_registration._id)
            return {
                'node_id': node_id,
                'token': approval_token,
            }
예제 #16
0
    def _on_reject(self, user):
        from website.project.model import Node, NodeLog

        parent_registration = Node.find_one(Q('retraction', 'eq', self))
        parent_registration.registered_from.add_log(
            action=NodeLog.RETRACTION_CANCELLED,
            params={
                'node': parent_registration._id,
                'retraction_id': self._id,
            },
            auth=Auth(user),
            save=True,
        )
예제 #17
0
파일: sanctions.py 프로젝트: atelic/osf.io
    def _on_reject(self, user):
        from website.project.model import Node, NodeLog

        parent_registration = Node.find_one(Q('retraction', 'eq', self))
        parent_registration.registered_from.add_log(
            action=NodeLog.RETRACTION_CANCELLED,
            params={
                'node': parent_registration.registered_from_id,
                'registration': parent_registration._id,
                'retraction_id': self._id,
            },
            auth=Auth(user),
            save=True,
        )
예제 #18
0
파일: sanctions.py 프로젝트: kch8qx/osf.io
    def _email_template_context(self, user, node, is_authorizer=False, urls=None):
        urls = urls or self.stashed_urls.get(user._id, {})
        registration_link = urls.get("view", self._view_url(user._id, node))
        if is_authorizer:
            from website.project.model import Node

            approval_link = urls.get("approve", "")
            disapproval_link = urls.get("reject", "")
            approval_time_span = settings.RETRACTION_PENDING_TIME.days * 24

            registration = Node.find_one(Q("retraction", "eq", self))

            return {
                "is_initiator": self.initiated_by == user,
                "initiated_by": self.initiated_by.fullname,
                "project_name": registration.title,
                "registration_link": registration_link,
                "approval_link": approval_link,
                "disapproval_link": disapproval_link,
                "approval_time_span": approval_time_span,
            }
        else:
            return {"initiated_by": self.initiated_by.fullname, "registration_link": registration_link}
예제 #19
0
파일: sanctions.py 프로젝트: atelic/osf.io
    def _get_registration(self):
        from website.project.model import Node

        return Node.find_one(Q('registration_approval', 'eq', self))
예제 #20
0
 def test_sanction_embargo(self):
     embargo = factories.EmbargoFactory()
     registration = Node.find_one(Q('embargo', 'eq', embargo))
     assert_equal(registration.sanction, embargo)
예제 #21
0
 def test_sanction_registration_approval(self):
     registration_approval = factories.RegistrationApprovalFactory()
     registration = Node.find_one(Q('registration_approval', 'eq', registration_approval))
     assert_equal(registration.sanction, registration_approval)
예제 #22
0
 def test_sanction_retraction(self):
     retraction = factories.RetractionFactory()
     registration = Node.find_one(Q('retraction', 'eq', retraction))
     assert_equal(registration.sanction, retraction)
예제 #23
0
파일: sanctions.py 프로젝트: kch8qx/osf.io
    def _view_url_context(self, user_id, node):
        from website.project.model import Node

        registration = Node.find_one(Q("retraction", "eq", self))
        return {"node_id": registration._id}
예제 #24
0
    def _view_url_context(self, user_id, node):
        from website.project.model import Node

        registration = Node.find_one(Q('retraction', 'eq', self))
        return {'node_id': registration._id}
예제 #25
0
 def test_is_pending_embargo(self):
     embargo = factories.EmbargoFactory()
     registration = Node.find_one(Q('embargo', 'eq', embargo))
     assert_true(embargo.is_pending_approval)
     assert_true(registration.is_pending_embargo)
예제 #26
0
 def test_embargo_end_date(self):
     embargo = factories.EmbargoFactory()
     registration = Node.find_one(Q('embargo', 'eq', embargo))
     assert_equal(registration.embargo_end_date, embargo.end_date)
예제 #27
0
 def test_is_pending_retraction(self):
     retraction = factories.RetractionFactory()
     registration = Node.find_one(Q('retraction', 'eq', retraction))
     assert_true(retraction.is_pending_approval)
     assert_true(registration.is_pending_retraction)
예제 #28
0
 def test_embargo_end_date(self):
     embargo = factories.EmbargoFactory()
     registration = Node.find_one(Q('embargo', 'eq', embargo))
     assert_equal(registration.embargo_end_date, embargo.end_date)
예제 #29
0
파일: sanctions.py 프로젝트: kch8qx/osf.io
    def _get_registration(self):
        from website.project.model import Node

        return Node.find_one(Q("embargo", "eq", self))
예제 #30
0
 def test_is_pending_embargo(self):
     embargo = factories.EmbargoFactory()
     registration = Node.find_one(Q('embargo', 'eq', embargo))
     assert_true(embargo.is_pending_approval)
     assert_true(registration.is_pending_embargo)
예제 #31
0
 def test_sanction_retraction(self):
     retraction = factories.RetractionFactory()
     registration = Node.find_one(Q('retraction', 'eq', retraction))
     assert_equal(registration.sanction, retraction)
예제 #32
0
 def test_sanction_embargo_termination_first(self):
     embargo_termination_approval = factories.EmbargoTerminationApprovalFactory()
     registration = Node.find_one(Q('embargo_termination_approval', 'eq', embargo_termination_approval))
     assert_equal(registration.sanction, embargo_termination_approval)
예제 #33
0
 def test_is_embargoed(self):
     embargo = factories.EmbargoFactory()
     registration = Node.find_one(Q('embargo', 'eq', embargo))
     with mock.patch('website.project.sanctions.Sanction.is_approved',
                     mock.Mock(return_value=True)):
         assert_true(registration.is_embargoed)
예제 #34
0
 def test_is_pending_retraction(self):
     retraction = factories.RetractionFactory()
     registration = Node.find_one(Q('retraction', 'eq', retraction))
     assert_true(retraction.is_pending_approval)
     assert_true(registration.is_pending_retraction)
예제 #35
0
 def test_is_retracted(self):
     retraction = factories.RetractionFactory()
     registration = Node.find_one(Q('retraction', 'eq', retraction))
     with mock.patch('website.project.sanctions.Sanction.is_approved', mock.Mock(return_value=True)):
         assert_true(registration.is_retracted)
예제 #36
0
 def test_sanction_embargo(self):
     embargo = factories.EmbargoFactory()
     registration = Node.find_one(Q('embargo', 'eq', embargo))
     assert_equal(registration.sanction, embargo)
예제 #37
0
 def test_is_embargoed(self):
     embargo = factories.EmbargoFactory()
     registration = Node.find_one(Q('embargo', 'eq', embargo))
     with mock.patch('website.project.sanctions.Sanction.is_approved', mock.Mock(return_value=True)):
         assert_true(registration.is_embargoed)
예제 #38
0
    def _get_registration(self):
        from website.project.model import Node

        return Node.find_one(Q('registration_approval', 'eq', self))
예제 #39
0
 def test_sanction_registration_approval(self):
     registration_approval = factories.RegistrationApprovalFactory()
     registration = Node.find_one(
         Q('registration_approval', 'eq', registration_approval))
     assert_equal(registration.sanction, registration_approval)