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)
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
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)
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 _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_)
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_)
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)
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)
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)
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)
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)
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)
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