-
Notifications
You must be signed in to change notification settings - Fork 11
/
synapse-helpers.R
92 lines (88 loc) · 2.67 KB
/
synapse-helpers.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
## Try to get Synapse client object
attempt_instantiate <- function() {
if (reticulate::py_module_available("synapseclient")) {
return(synapse$Synapse())
} else {
return(NULL)
}
}
#' @title Attempt to log into Synapse
#'
#' @description Attempt to log into Synapse. Will first try using authentication
#' credentials written to a .synapseConfig file. If that fails, will try using
#' any credentials passed to the function. Will return `NULL` if not all
#' attempts failed.
#'
#' @export
#' @param syn Synapse client object
#' @param ... Synapse credentials, such as `authToken` or `email` with a
#' `password` or `apiKey`.
attempt_login <- function(syn, ...) {
is_logged_in <- FALSE
## Try logging in with .synapseConfig
try(
{
syn$login()
is_logged_in <- TRUE
},
silent = TRUE
)
## If failed to login, try using credentials provided
if (!is_logged_in) {
tryCatch(
{
syn$login(...)
},
error = function(e) {
stop("There was a problem logging in.")
}
)
}
}
#' @title Check if logged in as user
#'
#' @description Check if logged into Synapse as a non-anonymous user.
#'
#' @param syn Synapse client object.
#' @return FALSE if not logged in at all or if logged in anonymously, else TRUE.
logged_in <- function(syn) {
stopifnot(inherits(syn, "synapseclient.client.Synapse"))
if (is.null(syn) || is.null(syn$username) || (syn$username == "anonymous")) {
return(FALSE)
} else {
return(TRUE)
}
}
## Save uploaded files to Synapse
save_to_synapse <- function(input_file,
parent,
annotations = NULL,
synapseclient,
syn) {
if (!is_name_valid(input_file$name)) {
stop("Please check that file names only contain: letters, numbers, spaces, underscores, hyphens, periods, plus signs, and parentheses.") # nolint
}
file_to_upload <- synapseclient$File(
input_file$datapath,
parent = parent,
name = input_file$name,
annotations = annotations
)
syn$store(file_to_upload)
}
#' @title Set Synapse Staging Endpoints
#'
#' @description By default, the Synapse Python client points to the production
#' endpoints. This function will point the client to the staging endpoints for
#' testing.
#'
#' @export
#' @param syn Synapse client object
set_staging_endpoints <- function(syn) {
syn$setEndpoints(
authEndpoint = synapse$client$STAGING_ENDPOINTS$authEndpoint,
repoEndpoint = synapse$client$STAGING_ENDPOINTS$repoEndpoint,
fileHandleEndpoint = synapse$client$STAGING_ENDPOINTS$fileHandleEndpoint,
portalEndpoint = synapse$client$STAGING_ENDPOINTS$portalEndpoint
)
}