Skip to content

Filter rcloud extensions, take 2 #1609

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion htdocs/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ function main() {
}

RCloud.UI.init();
RCloud.session.init().then(function() {
RCloud.session.init(false, ['edit', 'gui']).then(function() {
var opts = {};
return RCloud.UI.load_options().then(function() {
if (location.search.length > 0) {
Expand Down
20 changes: 12 additions & 8 deletions htdocs/js/rcloud.js
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,16 @@ RCloud.create = function(rcloud_ocaps) {
return rcloud_ocaps.version_infoAsync.apply(null, arguments);
};

rcloud.anonymous_session_init = function() {
return rcloud_ocaps.anonymous_session_initAsync();
rcloud.set_session_type = function(session_type) {
return rcloud_ocaps.set_session_typeAsync(session_type);
};

rcloud.anonymous_compute_init = function() {
return rcloud_ocaps.anonymous_compute_initAsync();
rcloud.anonymous_session_init = function(session_type) {
return rcloud_ocaps.anonymous_session_initAsync(session_type);
};

rcloud.anonymous_compute_init = function(session_type) {
return rcloud_ocaps.anonymous_compute_initAsync(session_type);
};

rcloud.init_client_side_data = function() {
Expand Down Expand Up @@ -422,12 +426,12 @@ RCloud.create = function(rcloud_ocaps) {
];
RCloud.promisify_paths(rcloud_ocaps, paths);

rcloud.session_init = function(username, token) {
return rcloud_ocaps.session_initAsync(username, token);
rcloud.session_init = function(session_type, username, token) {
return rcloud_ocaps.session_initAsync(session_type, username, token);
};

rcloud.compute_init = function(username, token) {
return rcloud_ocaps.compute_initAsync(username, token);
rcloud.compute_init = function(session_type, username, token) {
return rcloud_ocaps.compute_initAsync(session_type, username, token);
};

rcloud.signal_to_compute = function(signal) {
Expand Down
46 changes: 25 additions & 21 deletions htdocs/js/rcloud_bundle.js
Original file line number Diff line number Diff line change
Expand Up @@ -245,12 +245,16 @@ RCloud.create = function(rcloud_ocaps) {
return rcloud_ocaps.version_infoAsync.apply(null, arguments);
};

rcloud.anonymous_session_init = function() {
return rcloud_ocaps.anonymous_session_initAsync();
rcloud.set_session_type = function(session_type) {
return rcloud_ocaps.set_session_typeAsync(session_type);
};

rcloud.anonymous_compute_init = function() {
return rcloud_ocaps.anonymous_compute_initAsync();
rcloud.anonymous_session_init = function(session_type) {
return rcloud_ocaps.anonymous_session_initAsync(session_type);
};

rcloud.anonymous_compute_init = function(session_type) {
return rcloud_ocaps.anonymous_compute_initAsync(session_type);
};

rcloud.init_client_side_data = function() {
Expand Down Expand Up @@ -528,12 +532,12 @@ RCloud.create = function(rcloud_ocaps) {
];
RCloud.promisify_paths(rcloud_ocaps, paths);

rcloud.session_init = function(username, token) {
return rcloud_ocaps.session_initAsync(username, token);
rcloud.session_init = function(session_type, username, token) {
return rcloud_ocaps.session_initAsync(session_type, username, token);
};

rcloud.compute_init = function(username, token) {
return rcloud_ocaps.compute_initAsync(username, token);
rcloud.compute_init = function(session_type, username, token) {
return rcloud_ocaps.compute_initAsync(session_type, username, token);
};

rcloud.signal_to_compute = function(signal) {
Expand Down Expand Up @@ -3819,16 +3823,16 @@ function could_not_initialize_error(err) {
return msg;
}

function on_connect_anonymous_allowed(ocaps) {
function on_connect_anonymous_allowed(ocaps, session_type) {
var promise_c, promise_s;
rcloud = RCloud.create(ocaps.rcloud);

if (rcloud.authenticated) {
promise_c = rcloud.compute_init(rcloud.username(), rcloud.github_token());
promise_s = rcloud.session_init(rcloud.username(), rcloud.github_token());
promise_c = rcloud.compute_init(session_type, rcloud.username(), rcloud.github_token());
promise_s = rcloud.session_init(session_type, rcloud.username(), rcloud.github_token());
} else {
promise_c = rcloud.anonymous_compute_init();
promise_s = rcloud.anonymous_session_init();
promise_c = rcloud.anonymous_compute_init(session_type);
promise_s = rcloud.anonymous_session_init(session_type);
}

promise_c.catch(function(e) {
Expand All @@ -3845,19 +3849,19 @@ function on_connect_anonymous_allowed(ocaps) {
return Promise.all([promise_c, promise_s]);
}

function on_connect_anonymous_disallowed(ocaps) {
function on_connect_anonymous_disallowed(ocaps, session_type) {
rcloud = RCloud.create(ocaps.rcloud);
if (!rcloud.authenticated) {
return Promise.reject(new Error("Authentication required"));
}

var res_c = rcloud.compute_init(rcloud.username(), rcloud.github_token());
var res_s = rcloud.session_init(rcloud.username(), rcloud.github_token());
var res_c = rcloud.compute_init(session_type, rcloud.username(), rcloud.github_token());
var res_s = rcloud.session_init(session_type, rcloud.username(), rcloud.github_token());

return Promise.all([res_c, res_s]);
}

function rclient_promise(allow_anonymous) {
function rclient_promise(allow_anonymous, session_type) {
return new Promise(function(resolve, reject) {
rclient = RClient.create({
debug: false,
Expand All @@ -3876,8 +3880,8 @@ function rclient_promise(allow_anonymous) {
rclient.allow_anonymous_ = allow_anonymous;
}).then(function(ocaps) {
var promise = allow_anonymous ?
on_connect_anonymous_allowed(ocaps) :
on_connect_anonymous_disallowed(ocaps);
on_connect_anonymous_allowed(ocaps, session_type) :
on_connect_anonymous_disallowed(ocaps, session_type);
return promise;
}).then(function(hello) {
if (!$("#output > .response").length)
Expand Down Expand Up @@ -3942,9 +3946,9 @@ RCloud.session = {
rclient.close();
return rclient_promise(anonymous);
});
}, init: function(allow_anonymous) {
}, init: function(allow_anonymous, session_type) {
this.first_session_ = true;
return rclient_promise(allow_anonymous);
return rclient_promise(allow_anonymous, session_type);
}
};

Expand Down
12 changes: 6 additions & 6 deletions htdocs/js/rcloud_bundle.min.js

Large diffs are not rendered by default.

26 changes: 13 additions & 13 deletions htdocs/js/session.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,16 +121,16 @@ function could_not_initialize_error(err) {
return msg;
}

function on_connect_anonymous_allowed(ocaps) {
function on_connect_anonymous_allowed(ocaps, session_type) {
var promise_c, promise_s;
rcloud = RCloud.create(ocaps.rcloud);

if (rcloud.authenticated) {
promise_c = rcloud.compute_init(rcloud.username(), rcloud.github_token());
promise_s = rcloud.session_init(rcloud.username(), rcloud.github_token());
promise_c = rcloud.compute_init(session_type, rcloud.username(), rcloud.github_token());
promise_s = rcloud.session_init(session_type, rcloud.username(), rcloud.github_token());
} else {
promise_c = rcloud.anonymous_compute_init();
promise_s = rcloud.anonymous_session_init();
promise_c = rcloud.anonymous_compute_init(session_type);
promise_s = rcloud.anonymous_session_init(session_type);
}

promise_c.catch(function(e) {
Expand All @@ -147,19 +147,19 @@ function on_connect_anonymous_allowed(ocaps) {
return Promise.all([promise_c, promise_s]);
}

function on_connect_anonymous_disallowed(ocaps) {
function on_connect_anonymous_disallowed(ocaps, session_type) {
rcloud = RCloud.create(ocaps.rcloud);
if (!rcloud.authenticated) {
return Promise.reject(new Error("Authentication required"));
}

var res_c = rcloud.compute_init(rcloud.username(), rcloud.github_token());
var res_s = rcloud.session_init(rcloud.username(), rcloud.github_token());
var res_c = rcloud.compute_init(session_type, rcloud.username(), rcloud.github_token());
var res_s = rcloud.session_init(session_type, rcloud.username(), rcloud.github_token());

return Promise.all([res_c, res_s]);
}

function rclient_promise(allow_anonymous) {
function rclient_promise(allow_anonymous, session_type) {
return new Promise(function(resolve, reject) {
rclient = RClient.create({
debug: false,
Expand All @@ -178,8 +178,8 @@ function rclient_promise(allow_anonymous) {
rclient.allow_anonymous_ = allow_anonymous;
}).then(function(ocaps) {
var promise = allow_anonymous ?
on_connect_anonymous_allowed(ocaps) :
on_connect_anonymous_disallowed(ocaps);
on_connect_anonymous_allowed(ocaps, session_type) :
on_connect_anonymous_disallowed(ocaps, session_type);
return promise;
}).then(function(hello) {
if (!$("#output > .response").length)
Expand Down Expand Up @@ -244,9 +244,9 @@ RCloud.session = {
rclient.close();
return rclient_promise(anonymous);
});
}, init: function(allow_anonymous) {
}, init: function(allow_anonymous, session_type) {
this.first_session_ = true;
return rclient_promise(allow_anonymous);
return rclient_promise(allow_anonymous, session_type);
}
};

Expand Down
4 changes: 2 additions & 2 deletions htdocs/mini.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ function main() {
rcloud = RCloud.create(ocaps.rcloud);
var promise;
if (rcloud.authenticated) {
promise = rcloud.session_init(rcloud.username(), rcloud.github_token());
promise = rcloud.session_init([], rcloud.username(), rcloud.github_token());
} else {
promise = rcloud.anonymous_session_init();
promise = rcloud.anonymous_session_init([]);
}
promise = promise.then(function(hello) {
rclient.post_response(hello);
Expand Down
2 changes: 1 addition & 1 deletion htdocs/view.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ function main() {
shell.is_view_mode(true);
RCloud.UI.session_pane.init(); // really should be error logger which detects if there is a pane
RCloud.UI.init();
RCloud.session.init(true).then(function() {
RCloud.session.init(true, ['gui']).then(function() {
return Promise.all([
RCloud.UI.navbar.load(),
(rcloud.config ?
Expand Down
1 change: 1 addition & 0 deletions rcloud.packages/rcloud.enviewer/DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ Maintainer: Gordon Woodhull <[email protected]>
Description: rcloud.enviewer displays the current workspace environment live in RCloud
Depends: rcloud.support
License: MIT
RCloud-Extension: edit
1 change: 1 addition & 0 deletions rcloud.packages/rcloud.notebook.info/DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ Description: rcloud.notebook.info adds a Notebook Info command to each notebook
Depends: rcloud.support
NOTE: --- packages that are not on CRAN/RForge.net *must* be in Suggests! ---
License: MIT
RCloud-Extension: edit
1 change: 1 addition & 0 deletions rcloud.packages/rcloud.viewer/DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ Description: rcloud.viewer implements View by putting a table into an RCloud sid
Depends: rcloud.support
NOTE: --- packages that are not on CRAN/RForge.net *must* be in Suggests! ---
License: MIT
RCloud-Extension: edit
44 changes: 31 additions & 13 deletions rcloud.support/R/session.R
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,9 @@ session.markdown.eval <- function(command, language, silent) {
}

## WS init
rcloud.compute.init <- function(...) {
rcloud.compute.init <- function(session.type, ...) {
if (!is.null(.session$compute.init.result)) return(.session$compute.init.result)
.session$session.type <- session.type
set.seed(Sys.getpid()) # we want different seeds so we get different file names
start.rcloud(...)
rcloud.reset.session()
Expand All @@ -102,8 +103,9 @@ rcloud.compute.init <- function(...) {
}

## WS init
rcloud.anonymous.compute.init <- function(...) {
rcloud.anonymous.compute.init <- function(session.type, ...) {
if (!is.null(.session$compute.init.result)) return(.session$compute.init.result)
.session$session.type <- session.type
set.seed(Sys.getpid()) # we want different seeds so we get different file names
start.rcloud.anonymously(...)
rcloud.reset.session()
Expand All @@ -112,9 +114,9 @@ rcloud.anonymous.compute.init <- function(...) {
paste(R.version.string, " --- welcome, anonymous user", sep='')
}

rcloud.session.init <- function(...) {
rcloud.session.init <- function(session.type, ...) {
if (identical(.session$separate.compute, FALSE))
rcloud.compute.init(...)
rcloud.compute.init(session.type, ...)
else {
start.rcloud(...)
"" ## return "" since the result is a dual promise for both resulting in an array
Expand All @@ -130,17 +132,33 @@ rcloud.anonymous.session.init <- function(...) {
}
}

rcloud.reset.session <- function() {
rcloud.active.extensions <- function() {
session.type <- .session$session.type
if(missing(session.type)) session.type <- c()
## load all-user and per-user rcloud add-ons
all.addons <- rcloud.config.get.alluser.option("addons")
user.addons <- rcloud.config.get.user.option("addons")
user.skip.addons <- rcloud.config.get.user.option("skip-addons");
extensions <- setdiff(c(all.addons, user.addons), user.skip.addons)
Filter(function(x) {
exttype <- packageDescription(x, fields='RCloud-Extension')
if(is.null(exttype) || is.na(exttype))
FALSE
else {
exttype <- tolower(strsplit(exttype, ' *, *')[[1]])
length(intersect(session.type, exttype)) > 0
}
}, extensions)
}

rcloud.reset.session <- function(session.type) {
## use the global workspace as the parent to avoid long lookups across irrelevant namespaces
.session$knitr.env <- new.env(parent=.GlobalEnv)
## load all-user and per-user rcloud add-ons
if (!identical(.session$mode, "call")) {
all.addons <- rcloud.config.get.alluser.option("addons")
user.addons <- rcloud.config.get.user.option("addons")
user.skip.addons <- rcloud.config.get.user.option("skip-addons");
addons <- setdiff(c(all.addons, user.addons), user.skip.addons)
for (x in addons) suppressWarnings(suppressMessages(require(x, character.only=TRUE, quietly=TRUE, warn.conflicts=FALSE)))
}

lapply(rcloud.active.extensions(),
function(x) {
suppressWarnings(suppressMessages(require(x, character.only=TRUE)))
})

## close all devices
while (dev.cur() > 1L) dev.off()
Expand Down