def osfstorage_download(file_node, payload, node_addon, **kwargs): # Set user ID in session data for checking if user is contributor # to project. user_id = payload.get("user") if user_id: current_session = get_session() current_session.data["auth_user_id"] = user_id if not request.args.get("version"): version_id = None else: try: version_id = int(request.args["version"]) except ValueError: raise make_error(httplib.BAD_REQUEST, message_short="Version must be an integer if not specified") version = file_node.get_version(version_id, required=True) if request.args.get("mode") not in ("render",): utils.update_analytics(node_addon.owner, file_node._id, int(version.identifier) - 1) return { "data": {"name": file_node.name, "path": version.location_hash}, "settings": { osf_storage_settings.WATERBUTLER_RESOURCE: version.location[osf_storage_settings.WATERBUTLER_RESOURCE] }, }
def osfstorage_download(file_node, payload, node_addon, **kwargs): if not request.args.get('version'): version_id = None else: try: version_id = int(request.args['version']) except ValueError: raise make_error(httplib.BAD_REQUEST, 'Version must be an integer if not specified') version = file_node.get_version(version_id, required=True) if request.args.get('mode') not in ('render', ): utils.update_analytics(node_addon.owner, file_node._id, int(version.identifier) - 1) return { 'data': { 'name': file_node.name, 'path': version.location_hash, }, 'settings': { osf_storage_settings.WATERBUTLER_RESOURCE: version.location[osf_storage_settings.WATERBUTLER_RESOURCE], }, }
def osfstorage_download(file_node, payload, node_addon, **kwargs): # Set user ID in session data for checking if user is contributor # to project. user_id = payload.get('user') if user_id: current_session = get_session() current_session.data['auth_user_id'] = user_id if not request.args.get('version'): version_id = None else: try: version_id = int(request.args['version']) except ValueError: raise make_error(httplib.BAD_REQUEST, message_short='Version must be an integer if not specified') version = file_node.get_version(version_id, required=True) if request.args.get('mode') not in ('render', ): utils.update_analytics(node_addon.owner, file_node._id, int(version.identifier) - 1) return { 'data': { 'name': file_node.name, 'path': version.location_hash, }, 'settings': { osf_storage_settings.WATERBUTLER_RESOURCE: version.location[osf_storage_settings.WATERBUTLER_RESOURCE], }, }
def osf_storage_download_file_hook(node_addon, payload, **kwargs): try: path = payload['path'].strip('/') version_id = int(payload.get('version', 0)) - 1 except KeyError: raise make_error(httplib.BAD_REQUEST, 'Path is required') except ValueError: raise make_error(httplib.BAD_REQUEST, 'Version must be an int or not specified') storage_node = model.OsfStorageFileNode.get_file(path, node_addon) if storage_node.is_deleted: raise HTTPError(httplib.GONE) version = storage_node.get_version(version_id) if payload.get('mode') != 'render': if version_id < 0: version_id = len(storage_node.versions) + version_id utils.update_analytics(node_addon.owner, storage_node._id, version_id) return { 'data': { 'name': storage_node.name, 'path': version.location_hash, }, 'settings': { osf_storage_settings.WATERBUTLER_RESOURCE: version.location[osf_storage_settings.WATERBUTLER_RESOURCE], }, }
def test_migrate_download_counts(self, mock_session): names = [] for index, num in enumerate(range(10)): names.append('DEAR GOD$! ({})^ CARPNADOS'.format(num)) fobj, _ = oldels.OsfStorageFileRecord.get_or_create(names[-1], self.node_settings) for _id in range(index): fobj.create_version(self.user, { 'folder': '', 'bucket': '', 'service': 'buttfiles', 'object': '{}{}'.format(index, _id), }) utils.update_analytics(self.project, fobj.path, _id + 1) assert len(fobj.versions) == index assert fobj.get_download_count() == index assert len(self.node_settings.file_tree.children) == 10 migration.migrate_node_settings(self.node_settings, dry=False) migration.migrate_children(self.node_settings, dry=False) for index, child in enumerate(self.node_settings.root_node.children): assert len(child.versions) == index assert child.get_download_count() == index for _id in range(index): assert child.get_download_count(_id) == 1
def osfstorage_download(file_node, payload, node_addon, **kwargs): if not request.args.get('version'): version_id = None else: try: version_id = int(request.args['version']) except ValueError: raise make_error(httplib.BAD_REQUEST, 'Version must be an integer if not specified') version = file_node.get_version(version_id, required=True) if request.args.get('mode') not in ('render', ): if version_id < 0: version_id = len(file_node.versions) + version_id utils.update_analytics(node_addon.owner, file_node._id, version_id) return { 'data': { 'name': file_node.name, 'path': version.location_hash, }, 'settings': { osf_storage_settings.WATERBUTLER_RESOURCE: version.location[osf_storage_settings.WATERBUTLER_RESOURCE], }, }
def osfstorage_download(file_node, payload, node_addon, **kwargs): try: version_id = int(request.args.get("version") or 0) - 1 except ValueError: raise make_error(httplib.BAD_REQUEST, "Version must be an int or not specified") version = file_node.get_version(version_id, required=True) if request.args.get("mode") not in ("render",): if version_id < 0: version_id = len(file_node.versions) + version_id utils.update_analytics(node_addon.owner, file_node._id, version_id) return { "data": {"name": file_node.name, "path": version.location_hash}, "settings": { osf_storage_settings.WATERBUTLER_RESOURCE: version.location[osf_storage_settings.WATERBUTLER_RESOURCE] }, }
def test_migrate_download_counts(self, mock_session): names = [] for index, num in enumerate(range(10)): names.append('DEAR GOD$! ({})^ CARPNADOS'.format(num)) fobj, _ = oldels.OsfStorageFileRecord.get_or_create( names[-1], self.node_settings) for _id in range(index): fobj.create_version( self.user, { 'folder': '', 'bucket': '', 'service': 'buttfiles', 'object': '{}{}'.format(index, _id), }) utils.update_analytics(self.project, fobj.path, _id + 1) self.project.logs[-1].params['path'] = 'notnone' self.project.logs[-1].save() assert len(fobj.versions) == index assert fobj.get_download_count() == index assert len(self.node_settings.file_tree.children) == 10 migration.migrate_node_settings(self.node_settings, dry=False) migration.migrate_children(self.node_settings, dry=False) children = model.OsfStorageFileNode.find( Q('kind', 'eq', 'file') & Q('node_settings', 'eq', self.node_settings)) for index, child in enumerate(children): assert len(child.versions) == index assert child.get_download_count() == index for _id in range(index): assert child.get_download_count(_id) == 1 for index, child in enumerate(self.node_settings.file_tree.children): assert len(child.versions) == index assert child.get_download_count() == index for _id in range(index): assert child.get_download_count(_id + 1) == 1
def test_serialize_revision(self): sessions.sessions[request._get_current_object()] = Session() utils.update_analytics(self.project, self.record._id, 0) utils.update_analytics(self.project, self.record._id, 0) utils.update_analytics(self.project, self.record._id, 2) expected = { 'index': 1, 'user': { 'name': self.user.fullname, 'url': self.user.url, }, 'date': self.versions[0].date_created.isoformat(), 'downloads': 2, 'md5': None, 'sha256': None, } observed = utils.serialize_revision( self.project, self.record, self.versions[0], 0, ) assert_equal(expected, observed) assert_equal(self.record.get_download_count(), 3) assert_equal(self.record.get_download_count(version=2), 1) assert_equal(self.record.get_download_count(version=0), 2)
def osfstorage_download(file_node, payload, node_addon, **kwargs): try: version_id = int(request.args.get('version') or 0) - 1 except ValueError: raise make_error(httplib.BAD_REQUEST, 'Version must be an int or not specified') version = file_node.get_version(version_id) if request.args.get('mode') not in ('render', ): if version_id < 0: version_id = len(file_node.versions) + version_id utils.update_analytics(node_addon.owner, file_node._id, version_id) return { 'data': { 'name': file_node.name, 'path': version.location_hash, }, 'settings': { osf_storage_settings.WATERBUTLER_RESOURCE: version.location[osf_storage_settings.WATERBUTLER_RESOURCE], }, }
def test_download_count_file(self, mock_session): mock_session.data = {} child = self.node_settings.root_node.append_file('Test') utils.update_analytics(self.project, child._id, 0) utils.update_analytics(self.project, child._id, 1) utils.update_analytics(self.project, child._id, 2) assert_equals(child.get_download_count(), 3) assert_equals(child.get_download_count(0), 1) assert_equals(child.get_download_count(1), 1) assert_equals(child.get_download_count(2), 1)
def test_download_count_file(self, mock_session): mock_session.data = {} child = self.node_settings.get_root().append_file('Test') utils.update_analytics(self.project, child._id, 0) utils.update_analytics(self.project, child._id, 1) utils.update_analytics(self.project, child._id, 2) assert_equals(child.get_download_count(), 3) assert_equals(child.get_download_count(0), 1) assert_equals(child.get_download_count(1), 1) assert_equals(child.get_download_count(2), 1)
def test_anon_revisions(self): sessions.sessions[request._get_current_object()] = Session() utils.update_analytics(self.project, self.record._id, 0) utils.update_analytics(self.project, self.record._id, 0) utils.update_analytics(self.project, self.record._id, 2) expected = { 'index': 2, 'user': None, 'date': self.versions[0].date_created.isoformat(), 'downloads': 0, } observed = utils.serialize_revision(self.project, self.record, self.versions[0], 1, anon=True) assert_equal(expected, observed)
def test_anon_revisions(self): sessions.sessions[request._get_current_object()] = Session() utils.update_analytics(self.project, self.record._id, 0) utils.update_analytics(self.project, self.record._id, 0) utils.update_analytics(self.project, self.record._id, 2) expected = { 'index': 2, 'user': None, 'date': self.versions[0].date_created.isoformat(), 'downloads': 0, } observed = utils.serialize_revision( self.project, self.record, self.versions[0], 1, anon=True ) assert_equal(expected, observed)