예제 #1
0
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]
        },
    }
예제 #2
0
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],
        },
    }
예제 #3
0
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],
        },
    }
예제 #4
0
파일: views.py 프로젝트: erinmayhood/osf.io
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],
        },
    }
예제 #5
0
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],
        },
    }
예제 #6
0
    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
예제 #7
0
파일: views.py 프로젝트: danielneis/osf.io
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],
        },
    }
예제 #8
0
파일: views.py 프로젝트: njantrania/osf.io
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]
        },
    }
예제 #9
0
    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
예제 #10
0
 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)
예제 #11
0
 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)
예제 #12
0
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],
        },
    }
예제 #13
0
    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)
예제 #14
0
    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)
예제 #15
0
 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)
예제 #16
0
 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)