예제 #1
0
    def setUp(self):
        super(TestSetPreprintFile, self).setUp()

        self.user = AuthUserFactory()
        self.auth = Auth(user=self.user)
        self.read_write_user = AuthUserFactory()
        self.read_write_user_auth = Auth(user=self.read_write_user)

        self.project = ProjectFactory(creator=self.user)
        self.file = OsfStorageFile.create(
            is_file=True,
            node=self.project,
            path='/panda.txt',
            name='panda.txt',
            materialized_path='/panda.txt')
        self.file.save()

        self.file_two = OsfStorageFile.create(
            is_file=True,
            node=self.project,
            path='/pandapanda.txt',
            name='pandapanda.txt',
            materialized_path='/pandapanda.txt')
        self.file_two.save()

        self.project.add_contributor(self.read_write_user, permissions=[permissions.WRITE])
        self.project.save()

        self.preprint = PreprintFactory(project=self.project, finish=False)
예제 #2
0
    def _create(cls, target_class, project=None, is_public=True, filename='preprint_file.txt', providers=None, doi=None, external_url=None, *args, **kwargs):
        save_kwargs(**kwargs)
        user = None
        if project:
            user = project.creator
        user = kwargs.get('user') or kwargs.get('creator') or user or UserFactory()
        kwargs['creator'] = user
        # Original project to be converted to a preprint
        project = project or target_class(*args, **kwargs)
        if user._id not in project.permissions:
            project.add_contributor(
                contributor=user,
                permissions=permissions.CREATOR_PERMISSIONS,
                log=False,
                save=False
            )
        project.save()
        project.reload()

        file = OsfStorageFile.create(
            is_file=True,
            node=project,
            path='/{}'.format(filename),
            name=filename,
            materialized_path='/{}'.format(filename))
        file.save()

        project.set_preprint_file(file, auth=Auth(project.creator))
        project.preprint_subjects = [SubjectFactory()._id]
        project.preprint_providers = providers
        project.preprint_doi = doi
        project.external_url = external_url
        project.save()

        return project
예제 #3
0
 def test_file_download_url_no_guid(self):
     file_ = self.root.append_file('Timber.mp3')
     path = OsfStorageFile.find_one( Q('node', 'eq', file_.node_id)).wrapped().path
     deep_url = '/' + file_.node._id + '/files/osfstorage' + path + '/'
     find = query_file('Timber.mp3')['results']
     assert_not_equal(file_.path, '')
     assert_equal(file_.path, path)
     assert_equal(find[0]['guid_url'], None)
     assert_equal(find[0]['deep_url'], deep_url)
예제 #4
0
    def _create(
        cls,
        target_class,
        project=None,
        is_public=True,
        filename="preprint_file.txt",
        provider=None,
        doi=None,
        external_url=None,
        is_published=True,
        subjects=None,
        finish=True,
        *args,
        **kwargs
    ):
        save_kwargs(**kwargs)
        user = None
        if project:
            user = project.creator
        user = kwargs.get("user") or kwargs.get("creator") or user or UserFactory()
        kwargs["creator"] = user
        # Original project to be converted to a preprint
        project = project or AbstractNodeFactory(*args, **kwargs)
        if user._id not in project.permissions:
            project.add_contributor(
                contributor=user, permissions=permissions.CREATOR_PERMISSIONS, log=False, save=False
            )
        project.save()
        project.reload()

        file = OsfStorageFile.create(
            is_file=True,
            node=project,
            path="/{}".format(filename),
            name=filename,
            materialized_path="/{}".format(filename),
        )
        file.save()

        preprint = target_class(node=project, provider=provider)

        auth = Auth(project.creator)

        if finish:
            preprint.set_primary_file(file, auth=auth)
            subjects = subjects or [[SubjectFactory()._id]]
            preprint.set_subjects(subjects, auth=auth)
            preprint.set_published(is_published, auth=auth)

        if not preprint.is_published:
            project._has_abandoned_preprint = True

        project.preprint_article_doi = doi
        project.save()
        preprint.save()

        return preprint
예제 #5
0
    def _create(cls,
                target_class,
                project=None,
                is_public=True,
                filename='preprint_file.txt',
                provider=None,
                doi=None,
                external_url=None,
                is_published=True,
                subjects=None,
                finish=True,
                *args,
                **kwargs):
        save_kwargs(**kwargs)
        user = None
        if project:
            user = project.creator
        user = kwargs.get('user') or kwargs.get(
            'creator') or user or UserFactory()
        kwargs['creator'] = user
        # Original project to be converted to a preprint
        project = project or AbstractNodeFactory(*args, **kwargs)
        if user._id not in project.permissions:
            project.add_contributor(
                contributor=user,
                permissions=permissions.CREATOR_PERMISSIONS,
                log=False,
                save=False)
        project.save()
        project.reload()

        file = OsfStorageFile.create(is_file=True,
                                     node=project,
                                     path='/{}'.format(filename),
                                     name=filename,
                                     materialized_path='/{}'.format(filename))
        file.save()

        preprint = target_class(node=project, provider=provider)

        auth = Auth(project.creator)

        if finish:
            preprint.set_primary_file(file, auth=auth)
            subjects = subjects or [[SubjectFactory()._id]]
            preprint.set_subjects(subjects, auth=auth)
            preprint.set_published(is_published, auth=auth)

        if not preprint.is_published:
            project._has_abandoned_preprint = True

        project.preprint_article_doi = doi
        project.save()
        preprint.save()

        return preprint
def main():
    init_app(routes=False)
    dry_run = 'dry' in sys.argv
    logger.warn('Current files will now be updated to be indexed if necessary')
    if dry_run:
        logger.warn('Dry_run mode')
    for file_ in OsfStorageFile.find():
        logger.info(u'File with _id {0} and name {1} has been saved.'.format(file_._id, file_.name))
        if not dry_run:
            search.update_file(file_)
예제 #7
0
def main():
    init_app(routes=False)
    dry_run = 'dry' in sys.argv
    logger.warn('Current files will now be updated to be indexed if necessary')
    if dry_run:
        logger.warn('Dry_run mode')
    for file_ in OsfStorageFile.find():
        logger.info(u'File with _id {0} and name {1} has been saved.'.format(
            file_._id, file_.name))
        if not dry_run:
            search.update_file(file_)
예제 #8
0
    def test_admin_can_set_file(self):
        initial_file = self.preprint.primary_file
        file = OsfStorageFile.create(node=self.project,
                                     path='/panda.txt',
                                     name='panda.txt',
                                     materialized_path='/panda.txt')
        file.save()

        self.preprint.set_primary_file(file, auth=Auth(self.user), save=True)

        self.preprint.reload()
        self.preprint.node.reload()
        assert_not_equal(initial_file._id, self.preprint.primary_file._id)
        assert_equal(file._id, self.preprint.primary_file._id)
예제 #9
0
 def test_redirect_to_file_view(self):
     test_file = OsfStorageFile.create(
         is_file=True,
         node=ProjectFactory(),
         path='/test',
         name='test',
         materialized_path='/test',
     )
     test_file.save()
     guid = test_file.get_guid(create=True)
     url = '/{}guids/{}/'.format(API_BASE, guid._id)
     res = self.app.get(url, auth=self.user.auth)
     redirect_url = '{}{}files/{}/'.format(API_DOMAIN, API_BASE, test_file._id)
     assert_equal(res.status_code, 302)
     assert_equal(res.location, redirect_url)
예제 #10
0
    def test_nonadmin_cannot_set_file(self):
        initial_file = self.preprint.primary_file
        file = OsfStorageFile.create(
            node=self.project,
            path='/panda.txt',
            name='panda.txt',
            materialized_path='/panda.txt')
        file.save()
        
        with assert_raises(PermissionsError):
            self.preprint.set_primary_file(file, auth=Auth(self.write_contrib), save=True)

        self.preprint.reload()
        self.preprint.node.reload()
        assert_equal(initial_file._id, self.preprint.primary_file._id)
예제 #11
0
 def test_redirect_to_file_view(self):
     test_file = OsfStorageFile.create(
         is_file=True,
         node=ProjectFactory(),
         path='/test',
         name='test',
         materialized_path='/test',
     )
     test_file.save()
     guid = test_file.get_guid(create=True)
     url = '/{}guids/{}/'.format(API_BASE, guid._id)
     res = self.app.get(url, auth=self.user.auth)
     redirect_url = '{}{}files/{}/'.format(API_DOMAIN, API_BASE, test_file._id)
     assert_equal(res.status_code, 302)
     assert_equal(res.location, redirect_url)
예제 #12
0
    def test_admin_can_set_file(self):
        initial_file = self.preprint.primary_file
        file = OsfStorageFile.create(
            is_file=True,
            node=self.project,
            path='/panda.txt',
            name='panda.txt',
            materialized_path='/panda.txt')
        file.save()
        
        self.preprint.set_primary_file(file, auth=Auth(self.user), save=True)

        self.preprint.reload()
        self.preprint.node.reload()
        assert_not_equal(initial_file._id, self.preprint.primary_file._id)
        assert_equal(file._id, self.preprint.primary_file._id)
예제 #13
0
    def test_nonadmin_cannot_set_file(self):
        initial_file = self.preprint.primary_file
        file = OsfStorageFile.create(
            is_file=True,
            node=self.project,
            path='/panda.txt',
            name='panda.txt',
            materialized_path='/panda.txt')
        file.save()
        
        with assert_raises(PermissionsError):
            self.preprint.set_primary_file(file, auth=Auth(self.write_contrib), save=True)

        self.preprint.reload()
        self.preprint.node.reload()
        assert_equal(initial_file._id, self.preprint.primary_file._id)
예제 #14
0
    def test_redirect_when_viewing_private_project_file_through_view_only_link(self):
        project = ProjectFactory()
        test_file = OsfStorageFile.create(
            is_file=True,
            node=project,
            path='/test',
            name='test',
            materialized_path='/test',
        )
        test_file.save()
        guid = test_file.get_guid(create=True)
        view_only_link = self._add_private_link(project)

        url = '/{}guids/{}/?view_only={}'.format(API_BASE, guid._id, view_only_link.key)
        res = self.app.get(url, auth=AuthUserFactory().auth)
        redirect_url = '{}{}files/{}/?view_only={}'.format(API_DOMAIN, API_BASE, test_file._id, view_only_link.key)
        assert_equal(res.status_code, 302)
        assert_equal(res.location, redirect_url)
예제 #15
0
    def test_redirect_when_viewing_private_project_file_through_view_only_link(self):
        project = ProjectFactory()
        test_file = OsfStorageFile.create(
            is_file=True,
            node=project,
            path='/test',
            name='test',
            materialized_path='/test',
        )
        test_file.save()
        guid = test_file.get_guid(create=True)
        view_only_link = self._add_private_link(project)

        url = '/{}guids/{}/?view_only={}'.format(API_BASE, guid._id, view_only_link.key)
        res = self.app.get(url, auth=AuthUserFactory().auth)
        redirect_url = '{}{}files/{}/?view_only={}'.format(API_DOMAIN, API_BASE, test_file._id, view_only_link.key)
        assert_equal(res.status_code, 302)
        assert_equal(res.location, redirect_url)
예제 #16
0
    def _create(cls,
                target_class,
                project=None,
                is_public=True,
                filename='preprint_file.txt',
                providers=None,
                doi=None,
                external_url=None,
                *args,
                **kwargs):
        save_kwargs(**kwargs)
        user = None
        if project:
            user = project.creator
        user = kwargs.get('user') or kwargs.get(
            'creator') or user or UserFactory()
        kwargs['creator'] = user
        # Original project to be converted to a preprint
        project = project or target_class(*args, **kwargs)
        if user._id not in project.permissions:
            project.add_contributor(
                contributor=user,
                permissions=permissions.CREATOR_PERMISSIONS,
                log=False,
                save=False)
        project.save()
        project.reload()

        file = OsfStorageFile.create(is_file=True,
                                     node=project,
                                     path='/{}'.format(filename),
                                     name=filename,
                                     materialized_path='/{}'.format(filename))
        file.save()

        project.set_preprint_file(file, auth=Auth(project.creator))
        project.preprint_subjects = [SubjectFactory()._id]
        project.preprint_providers = providers
        project.preprint_doi = doi
        project.external_url = external_url
        project.save()

        return project