def save()

in airavata_django_portal_sdk/user_storage/api.py [0:0]


def save(request, path, file, name=None, content_type=None, storage_resource_id=None, experiment_id=None):
    """
    Save file in path in the user's storage and return DataProduct. If
    `experiment_id` provided then the path will be relative to the experiment
    data directory.
    """
    if remoteapi.is_remote_api_configured():
        if name is None and hasattr(file, 'name'):
            name = os.path.basename(file.name)
        files = {'file': (name, file, content_type)
                 if content_type is not None else (name, file)}
        resp = remoteapi.call(request,
                              "/user-storage/~/{path}",
                              path_params={"path": path},
                              data={"experiment-id": experiment_id},
                              method="post",
                              files=files)
        data = resp.json()
        product_uri = data['uploaded']['productUri']
        data_product = request.airavata_client.getDataProduct(
            request.authz_token, product_uri)
        return data_product
    final_path = _get_final_path(request, path, experiment_id)
    backend = get_user_storage_provider(request, storage_resource_id=storage_resource_id)
    storage_resource_id, resource_path = backend.save(final_path, file, name=name, content_type=content_type)
    data_product = _save_data_product(
        request, resource_path, storage_resource_id, name=name, content_type=content_type, backend=backend
    )
    return data_product