Nothing
if(getRversion() >= "2.15.1")
{
utils::globalVariables("GMQL_credentials")
utils::globalVariables("remote_url")
}
if(getRversion() >= "3.1.0")
{
utils::suppressForeignCheck("GMQL_credentials")
utils::suppressForeignCheck("remote_url")
}
#############################
# WEB AUTHENTICATION #
############################
#' Login to GMQL
#'
#' Login to GMQL REST services suite as a registered user, specifying username
#' and password, or as guest, using the proper GMQL web service available
#' on a remote server
#'
#' @import httr
#' @importFrom rJava J
#'
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param username string name used during signup
#' @param password string password used during signup
#'
#' @details
#' If both username and password are missing, you will be logged as guest.
#' After login you will receive an authentication token.
#' As token remains valid on server (until the next login / registration or
#' logout), a user can safely use a token for a previous session as a
#' convenience; this token is saved in R Global environment to perform
#' subsequent REST call even on complete R restart (if the environment has
#' been saved). If error occurs, a specific error is printed
#'
#' @return None
#'
#' @examples
#' ## Login to GMQL REST services suite as guest
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' @name login_gmql
#' @rdname login_gmql
#' @export
#'
login_gmql <- function(url, username = NULL, password = NULL)
{
if(!.is_login_expired(url))
{
print("Login still valid")
return(invisible(NULL))
}
as_guest <- TRUE
if(!is.null(username) || !is.null(password))
as_guest <- FALSE
if(as_guest)
{
url <- sub("/*[/]$","",url)
h <- c('Accept' = "Application/json")
URL <- paste0(url,"/guest")
req <- httr::GET(URL,httr::add_headers(h))
}
else
{
req <- httr::GET(url)
real_URL <- req$url
h <- c('Accept'="Application/json",'Content-Type'='Application/json')
URL <- paste0(real_URL,"login")
body <- list('username' = username,'password' = password)
req <- httr::POST(URL,httr::add_headers(h),body = body,encode = "json")
}
content <- httr::content(req)
if(req$status_code !=200)
stop(content$errorString)
else
{
WrappeR <- J("it/polimi/genomics/r/Wrapper")
url <- paste0(url,"/")
GMQL_remote <- list("remote_url" = url,
"authToken" = content$authToken,
"username" = username,
"password" = password)
WrappeR$save_tokenAndUrl(GMQL_remote$authToken,url)
assign("GMQL_credentials",GMQL_remote,.GlobalEnv)
print(paste("your Token is",GMQL_remote$authToken))
}
}
#' Logout from GMQL
#'
#' Logout from GMQL REST services suite
#' using the proper GMQL web service available on a remote server
#'
#' @import httr
#' @importFrom rJava J
#'
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#'
#' @details
#' After logout the authentication token will be invalidated.
#' The authentication token is removed from R Global environment.
#' If error occurs, a specific error is printed
#'
#' @examples
#'
#' ## Login to GMQL REST services suite as guest, then logout
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#' logout_gmql(remote_url)
#'
#' @return None
#'
#' @name logout_gmql
#' @rdname logout_gmql
#' @export
#'
logout_gmql <- function(url)
{
authToken = GMQL_credentials$authToken
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/logout")
h <- c('X-Auth-Token' = authToken)
req <- httr::GET(URL, httr::add_headers(h))
content <- httr::content(req)
if(req$status_code !=200)
stop(content$error)
else
{
#delete token from environment
WrappeR <- J("it/polimi/genomics/r/Wrapper")
WrappeR$delete_token()
if(exists("authToken", where = GMQL_credentials))
rm(GMQL_credentials, envir = .GlobalEnv)
print(content)
}
}
#' Register into remote GMQL
#'
#' Register to GMQL REST services suite
#' using the proper GMQL web service available on a remote server.
#'
#' @import httr
#' @importFrom rJava J
#'
#' @param url string url of server: It must contains the server address
#' and base url; service name is added automatically
#'
#' @param username string user name used to login in
#' @param psw string password used to login in
#' @param email string user email
#' @param first_name string user first name
#' @param last_name string user last name
#'
#' @details
#' After registration you will receive an authentication token.
#' As token remains valid on server (until the next login / registration or
#' logout), a user can safely use a token for a previous session as a
#' convenience; this token is saved in R Global environment to perform
#' subsequent REST calls or batch processing even on complete R restart
#' (if the environment has been saved). If error occurs, a specific error
#' is printed.
#'
#' @examples
#'
#' ## Register to GMQL REST services suite
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' \dontrun{
#' register_gmql(remote_url,"foo","foo","foo@foo.com","foo","foo")
#' }
#'
#' @return None
#'
#' @name register_gmql
#' @rdname register_gmql
#' @export
#'
register_gmql <- function(url, username, psw, email,
first_name, last_name)
{
req <- httr::GET(url)
real_URL <- req$url
URL <- paste0(real_URL,"register")
h <- c('Accept' = "Application/json")
reg_body <- list("firstName" = first_name, "lastName" = last_name,
"username" = username, "email" = email, "password" = psw)
req <- httr::POST(URL, body = reg_body, httr::add_headers(h),
encode = "json")
content <- httr::content(req,"parsed")
if(req$status_code !=200)
stop(content)
else
{
WrappeR <- J("it/polimi/genomics/r/Wrapper")
GMQL_remote <- list("remote_url" = url,
"authToken" = content$authToken,
"username" = username,
"password" = psw)
WrappeR$save_tokenAndUrl(GMQL_remote$authToken,url)
assign("GMQL_credentials",GMQL_remote,.GlobalEnv)
print(paste("your Token is",GMQL_remote$authToken))
}
}
#############################
# WEB BROWSING #
############################
#' Show all queries
#'
#' It shows all the GMQL queries saved by the user on remote repository,
#' using the proper GMQL web service available on a remote server
#'
#' @import httr
#'
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#'
#' @return List of queries. Every query in the list is described by:
#' \itemize{
#' \item{name: name of query}
#' \item{text: text of GMQL query}
#' }
#'
#' @details
#' If error occurs, a specific error is printed
#'
#' @examples
#'
#' ## Login to GMQL REST services suite
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## List all queries executed on remote GMQL system
#' list <- show_queries_list(remote_url)
#'
#' @name show_queries_list
#' @rdname show_queries_list
#' @export
#'
show_queries_list <- function(url)
{
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/query")
authToken = GMQL_credentials$authToken
h <- c('Accept' = 'Application/json', 'X-Auth-Token' = authToken)
req <- httr::GET(URL, httr::add_headers(h))
content <- httr::content(req,"parsed")
if(req$status_code==200)
return(content)
else
stop(content$error)
}
#' Save GMQL query
#'
#' It saves a GMQL query into repository, taken from file or inserted as text
#' string, using the proper GMQL web service available on a remote server
#'
#' @import httr
#'
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param queryName string name of query
#' @param queryTxt string text of GMQL query
#'
#' @return None
#'
#' @details
#' If you save a query with the same name of another query already stored
#' in repository, you will overwrite it; if no error occurs, it prints:
#' "Saved", otherwise it prints the error
#'
#' @examples
#'
#' ## Login to GMQL REST services suite as guest
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## This statement saves query written directly as input string parameter
#' ## with name "dna_query"
#'
#' save_query(remote_url, "example_query",
#' "DATASET = SELECT() Example_Dataset_1; MATERIALIZE DATASET INTO RESULT_DS;")
#'
#' ## With system.file() this statement defines the path to the folder
#' ## "example" of the package "RGMQL", and then it saves the query written
#' ## in the text file "query1.txt" into remote repository
#'
#' test_path <- system.file("example", package = "RGMQL")
#' test_query <- file.path(test_path, "query1.txt")
#' save_query_fromfile(remote_url, "query1", test_query)
#'
#' @name save_query
#' @rdname save_query
#' @export
#'
save_query <- function(url, queryName, queryTxt)
{
req <- httr::GET(url)
real_URL <- req$url
URL <- paste0(real_URL,"query/",queryName,"/save")
authToken = GMQL_credentials$authToken
h <- c('Accept' = 'text/plain', 'X-Auth-Token' = authToken,
'Content-Type' = 'text/plain')
req <- httr::POST(URL, httr::add_headers(h),body = queryTxt)
content <- httr::content(req)
if(req$status_code==200)
print(content) # print Saved
else
stop(content$error)
}
#' @param filePath string local file path of a txt file containing a GMQL query
#'
#' @name save_query_fromfile
#' @rdname save_query
#' @export
#'
save_query_fromfile <- function(url, queryName, filePath)
{
if(!file.exists(filePath))
stop("file does not exist")
queryTxt <- readLines(filePath)
save_query(url,queryName,queryTxt)
}
#############################
# WEB OPERATION #
############################
#' Run a GMQL query
#'
#' It runs a GMQL query into repository taken from file or inserted as text
#' string, using the proper GMQL web service available on a remote server
#'
#' @import httr
#'
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param queryName string name of the GMQL query file
#' @param query string text of the GMQL query
#' @param output_gtf logical value indicating file format used for
#' storing samples generated by the query.
#' The possiblities are:
#' \itemize{
#' \item{GTF}
#' \item{TAB}
#' }
#'
#' @return None
#'
#' @details
#' If error occurs, a specific error is printed
#'
#' @examples
#'
#' \dontrun{
#'
#' ## Login to GMQL REST services suite as guest
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## Run query as string input parameter
#' ## NOTE: not very suitable for long queries
#'
#' run_query(remote_url, "query_1", "DATASET = SELECT() Example_Dataset1;
#' MATERIALIZE DATASET INTO RESULT_DS;", output_gtf = FALSE)
#'
#' ## With system.file() this statement defines the path to the folder
#' ## "example" of the package "RGMQL", and then it executes the query
#' ## written in the text file "query1.txt"
#'
#' test_path <- system.file("example", package = "RGMQL")
#' test_query <- file.path(test_path, "query1.txt")
#' run_query_fromfile(remote_url, test_query, output_gtf = FALSE)
#' }
#'
#' @rdname run_query
#' @name run_query
#' @export
#'
run_query <- function(url, queryName, query, output_gtf = TRUE)
{
if(output_gtf)
out <- "GTF"
else
out <- "TAB"
req <- httr::GET(url)
real_URL <- req$url
URL <- paste0(real_URL,"queries/run/",queryName,"/",out)
authToken = GMQL_credentials$authToken
h <- c('Accept' = "Application/json",
'Content-Type' = 'text/plain','X-Auth-Token' = authToken)
req <- httr::POST(URL,body = query ,httr::add_headers(h),encode = "json")
content <- httr::content(req,"parsed")
if(req$status_code !=200)
stop(content$error)
else
return(content)
}
#' @import httr
#' @param filePath string path of a txt file containing a GMQL query
#'
#' @rdname run_query
#' @name run_query
#' @export
#'
run_query_fromfile <- function(url, filePath, output_gtf = TRUE)
{
if(!file.exists(filePath))
stop("file does not exist")
query <- readLines(filePath)
queryName <- sub('\\..*$', '', basename(filePath))
run_query(url, queryName, query, output_gtf)
}
#' Compile GMQL query
#'
#' It compiles a GMQL query taken from file or inserted as text string,
#' using the proper GMQL web service available on a remote server
#'
#'
#' @import httr
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param query string text of a GMQL query
#' @param filePath string path of txt file containing a GMQL query
#'
#' @return None
#'
#' @examples
#'
#' ## Login to GMQL REST services suite as guest
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## This statement gets the query as text string and runs the compile
#' ## web service
#'
#' compile_query(remote_url, "DATASET = SELECT() Example_Dataset_1;
#' MATERIALIZE DATASET INTO RESULT_DS;")
#'
#'
#' ## This statement defines the path to the file "query1.txt" in the
#' ## subdirectory "example" of the package "RGMQL" and run the compile
#' ## web service
#'
#' test_path <- system.file("example", package = "RGMQL")
#' test_query <- file.path(test_path, "query1.txt")
#' compile_query_fromfile(remote_url, test_query)
#'
#' ## Logout from GMQL REST services suite
#'
#' logout_gmql(remote_url)
#'
#' @name compile_query
#' @rdname compile_query
#' @export
#'
compile_query <- function(url, query)
{
authToken = GMQL_credentials$authToken
h <- c('Accept' = "Application/json",
'Content-Type' = 'text/plain','X-Auth-Token' = authToken)
req <- httr::GET(url)
real_URL <- req$url
URL <- paste0(real_URL,"queries/compile")
req <- httr::POST(URL,body = query ,httr::add_headers(h),encode = "json")
content <- httr::content(req,"parsed")
if(req$status_code !=200)
stop(content$error)
else
return(content)
}
#' @name compile_query
#' @rdname compile_query
#' @export
#'
compile_query_fromfile <- function(url ,filePath)
{
if(!file.exists(filePath))
stop("file does not exist")
query <- readLines(filePath)
compile_query(url,query)
}
#' Stop a job
#'
#' It stops a specific current query job
#'
#' @import httr
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param job_id string id of the job
#'
#' @return None
#'
#' @details
#' If error occurs, a specific error is printed
#'
#' @examples
#'
#' \dontrun{
#'
#' ## Login to GMQL REST services suite at remote url
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## This statement shows all jobs at GMQL remote system and selects one
#' ## running job, saving it into 'jobs_1' (in this case is the first of the
#' ## list), and then stop it
#'
#' list_jobs <- show_jobs_list(remote_url)
#' jobs_1 <- list_jobs$jobs[[1]]
#' stop_job(remote_url, jobs_1)
#' }
#'
#' @name stop_job
#' @rdname stop_job
#' @export
#'
stop_job <- function(url, job_id)
{
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/jobs/",job_id,"/stop")
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken,'Accept'= 'text/plain')
req <- httr::GET(URL, httr::add_headers(h))
content <- httr::content(req,"parsed")
if(req$status_code !=200)
stop(content)
else
print(content)
}
#' Show a job log or trace
#'
#' It shows a job log or traces a specific job
#'
#' @import httr
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param job_id string id of the job
#'
#' @return Log or trace text
#'
#' @details
#' If error occurs, a specific error is printed
#'
#' @examples
#' ## Login to GMQL REST services suite as guest
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## List all jobs
#' list_jobs <- show_jobs_list(remote_url)
#'
#' \dontrun{
#' jobs_1 <- list_jobs$jobs[[1]]
#'
#' ## Show jobs_1 log
#' show_job_log(remote_url, jobs_1)
#'
#' ## Trace jobs_1
#' trace_job(remote_url, jobs_1)
#'
#' }
#'
#' @name log_job
#' @rdname log_job
#' @export
#'
show_job_log <- function(url, job_id)
{
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/jobs/",job_id,"/log")
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken,'Accept'= 'Application/json')
req <- httr::GET(URL, httr::add_headers(h))
content <- httr::content(req,"parsed")
if(req$status_code !=200)
stop(content$error)
else
print(unlist(content,use.names = FALSE))
}
#' @import httr
#'
#' @name trace_job
#' @rdname log_job
#' @export
#'
trace_job <- function(url, job_id)
{
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/jobs/",job_id,"/trace")
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken,'Accept'= 'Application/json')
req <- httr::GET(URL, httr::add_headers(h))
content <- httr::content(req,"parsed")
if(req$status_code !=200)
stop(content$error)
else
return(content)
}
#' Show all jobs
#'
#' It shows all jobs (run, succeded or failed) invoked by the user on remote
#' server using, the proper GMQL web service available on a remote server
#'
#' @import httr
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#'
#' @return List of jobs. Every job in the list is described by:
#' \itemize{
#' \item{id: unique job identifier}
#' }
#'
#' @details
#' If error occurs, a specific error is printed
#'
#' @examples
#' ## Login to GMQL REST services suite as guest
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## List all jobs
#' list_jobs <- show_jobs_list(remote_url)
#'
#' @rdname show_jobs_list
#' @name show_jobs_list
#' @export
#'
show_jobs_list <- function(url)
{
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/jobs")
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken)
req <- httr::GET(URL, httr::add_headers(h))
content <- httr::content(req,"parsed")
if(req$status_code !=200)
stop(content$error)
else
return(content)
}
#############################
# WEB DATASET #
############################
#' Show datasets
#'
#' It shows all GMQL datasets stored by the user or public in remote
#' repository, using the proper GMQL web service available on a remote server
#'
#' @import httr
#' @param url single string url of server: It must contain the server address
#' and base url; service name is added automatically
#'
#' @return List of datasets. Every dataset in the list is described by:
#' \itemize{
#' \item{name: name of dataset}
#' \item{owner: public or name of the user}
#' }
#'
#' @details
#' If error occurs, a specific error is printed
#'
#' @examples
#'
#' ## Login to GMQL REST services suite as guest
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## List all datasets
#'
#' list <- show_datasets_list(remote_url)
#'
#' @name show_datasets_list
#' @rdname show_dataset
#' @export
#'
show_datasets_list <- function(url)
{
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/datasets")
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken)
req <- httr::GET(URL, httr::add_headers(h))
content <- httr::content(req,"parsed") #JSON
if(req$status_code !=200)
stop(content$error)
else
return(content)
}
#' Show dataset samples
#'
#' It show all samples from a specific GMQL dataset on remote repository,
#' using the proper GMQL web service available on a remote server
#'
#' @import httr
#'
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param datasetName name of dataset containing the samples whose list we
#' like to get; if the dataset is a public dataset, we have to add "public."
#' as prefix, as shown in the example below, otherwise no prefix is needed
#'
#' @return List of samples in dataset. Every sample in the list is described
#' by:
#' \itemize{
#' \item{id: id of sample}
#' \item{name: name of sample}
#' \item{path: sample repository path}
#' }
#'
#' @details
#' If error occurs, a specific error is printed
#'
#' @examples
#'
#' ## Login to GMQL REST services suite as guest
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## This statement shows all samples present into public dataset
#' ## 'Example_Dataset_1'
#'
#' list <- show_samples_list(remote_url, "public.Example_Dataset_1")
#'
#' @name show_samples_list
#' @rdname show_samples_list
#' @export
show_samples_list <- function(url,datasetName)
{
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/datasets/",datasetName)
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken)
req <- httr::GET(URL, httr::add_headers(h))
content <- httr::content(req,"parsed")
if(req$status_code !=200)
stop(content$error)
else
return(content)
}
#' Show dataset schema
#'
#' It shows the region attribute schema of a specific GMQL dataset on remote
#' repository, using the proper GMQL web service available on a remote server
#'
#' @import httr
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param datasetName name of dataset to get the schema;
#' if the dataset is a public dataset, we have to add "public." as prefix,
#' as shown in the example below, otherwise no prefix is needed
#'
#' @return List of region schema fields. Every field in the list is described
#' by:
#' \itemize{
#' \item{name: name of field (e.g. chr, start, end, strand, ...)}
#' \item{fieldType: (e.g. STRING, DOUBLE, ...)}
#' }
#'
#' @details
#' If error occurs, a specific error is printed
#'
#' @examples
#' ## Login to GMQL REST services suite as guest
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## Show schema of public dataset 'Example_Dataset_1'
#'
#' list <- show_schema(remote_url, "public.Example_Dataset_1")
#'
#' @name show_schema
#' @rdname show_schema
#' @export
#'
show_schema <- function(url,datasetName)
{
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/datasets/",datasetName,"/schema")
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken)
#req <- GET(url, add_headers(h),verbose(data_in = TRUE,info = TRUE))
req <- httr::GET(URL, httr::add_headers(h))
content <- httr::content(req,"parsed")
if(req$status_code != 200)
stop(content$error)
else
return(content)
}
#' Upload dataset
#'
#'
#' It uploads a folder (GMQL or not) containing sample files using
#' the proper GMQL web service available on a remote server:
#' a new dataset is created on remote repository
#'
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param datasetName name of dataset to create in repository
#' @param folderPath string local path to the folder containing the samples
#' files
#' @param schemaName string name of schema used to parse the samples;
#' schemaName available are:
#' \itemize{
#' \item{NARROWPEAK}
#' \item{BROADPEAK}
#' \item{VCF}
#' \item{BED}
#' \item{BEDGRAPH}
#' }
#' if schemaName is NULL, it looks for a XML schema file to read in the
#' folderPath
#' @param isGMQL logical value indicating whether it is uploaded a GMQL
#' dataset or not
#'
#' @return None
#'
#' @details
#' If no error occurs, it prints "Upload Complete", otherwise a specific error
#' is printed
#'
#' @examples
#'
#' \dontrun{
#'
#' ## This statement defines the path to the folder "DATASET_GDM" in the
#' ## subdirectory "example" of the package "RGMQL"
#'
#' test_path <- system.file("example", "DATASET_GDM", package = "RGMQL")
#'
#' ## Login to GMQL REST services suite at remote url
#'
#' remote_url <- "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## Upload of GMQL dataset with "dataset1" as name, without specifying any
#' ## schema
#'
#' upload_dataset(remote_url, "dataset1", folderPath = test_path)
#'
#' }
#' @name upload_dataset
#' @rdname upload_dataset
#' @export
#'
upload_dataset <- function(url, datasetName, folderPath, schemaName = NULL,
isGMQL = TRUE)
{
if(isGMQL)
folderPath <- file.path(folderPath,"files")
files <- list.files(folderPath,full.names = TRUE)
if(!length(files))
stop("no files present")
count = .counter(0)
list_files <- lapply(files, function(x) {
file <- httr::upload_file(x)
})
list_files_names <- vapply(list_files, function(x) {
paste0("file",count())
},character(1))
names(list_files) <- list_files_names
req <- httr::GET(url)
real_URL <- req$url
URL <- paste0(real_URL,"datasets/",datasetName,"/uploadSample")
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken, 'Accept:' = 'Application/json')
schema_name <- tolower(schemaName)
if(is.null(schemaName))
{
schema_name <- list.files(folderPath, pattern = "*.schema$",
full.names = TRUE)
if(!length(schema_name))
stop("schema must be present")
list_files <- list(list("schema" = httr::upload_file(schema_name)),
list_files)
list_files <- unlist(list_files,recursive = FALSE)
URL <- paste0(real_URL,"datasets/",datasetName,"/uploadSample")
}
else
{
schema_name <- tolower(schemaName)
if(identical(schema_name,"customparser"))
{
schema_name <- list.files(folderPath, pattern = "*.schema$",
full.names = TRUE)
if(!length(schema_name))
stop("schema must be present")
list_files <- list(list("schema" = httr::upload_file(schema_name)),
list_files)
list_files <- unlist(list_files,recursive = FALSE)
URL <- paste0(real_URL,"datasets/",datasetName,"/uploadSample")
}
else
{
if(!schema_name %in% c("narrowpeak","vcf","broadpeak","bed",
"bedgraph"))
stop("schema not admissable")
URL <- paste0(real_URL,"datasets/",datasetName,
"/uploadSample?schemaName=",schema_name)
}
}
req <- httr::POST(URL, body = list_files ,httr::add_headers(h))
content <- httr::content(req)
if(req$status_code !=200)
print(content)
else
print("upload Complete")
}
#' Delete dataset
#'
#' It deletes single private dataset specified by name from remote repository
#' using the proper GMQL web service available on a remote server
#'
#' @import httr
#'
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param datasetName string name of dataset to delete
#'
#' @return None
#'
#' @details
#' If no error occurs, it prints "Deleted Dataset", otherwise a specific error
#' is printed
#'
#' @examples
#'
#' \dontrun{
#'
#' ## This dataset does not exist
#'
#' remote_url <- "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#' delete_dataset(remote_url, "test1_20170604_180908_RESULT_DS")
#'
#' }
#'
#' @name delete_dataset
#' @rdname delete_dataset
#' @export
#'
delete_dataset <- function(url,datasetName)
{
req <- httr::GET(url)
real_URL <- req$url
URL <- paste0(real_URL,"datasets/",datasetName)
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken, 'Accept:' = 'application/json')
req <- httr::DELETE(URL, httr::add_headers(h))
content <- httr::content(req,"parsed") #JSON
if(req$status_code !=200)
stop(content$error)
else
print(content$result)
}
#' Download Dataset
#'
#' It donwloads private dataset as zip file from remote repository to local
#' path, or donwloads and saves it into R environment as GRangesList, using
#' the proper GMQL web service available on a remote server
#'
#' @import httr
#' @importFrom utils unzip
#'
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param datasetName string name of dataset to download
#' @param path string local path folder where to store dataset,
#' by default it is R working directory
#' @return None
#'
#' @details
#' If error occurs, a specific error is printed
#'
#' @examples
#'
#' ## Download dataset in R working directory
#' ## In this case we try to download a dataset of the user
#' ## (public datasets from remote repository cannot be downloaded)
#'
#' \dontrun{
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#' download_dataset(remote_url, "Example_Dataset_1", path = getwd())
#'
#' ## Create GRangesList from user dataset Example_Dataset1 got
#' ## from repository
#'
#' download_as_GRangesList(remote_url, "Example_Dataset_1")
#' }
#'
#' @name download_dataset
#' @rdname download_dataset
#' @export
#'
download_dataset <- function(url, datasetName, path = getwd())
{
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/datasets/",datasetName,"/zip")
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken, 'Accept' = 'application/zip')
req <- httr::GET(URL,httr::add_headers(h))
content <- httr::content(req)
if(req$status_code !=200)
print(content)
else
{
zip_path <- file.path(path,paste0(datasetName,".zip"))
dir_out <- file.path(path,"")
writeBin(content, zip_path)
unzip(zip_path,exdir = dir_out)
print("Download Complete")
}
}
#' @import httr
#' @importClassesFrom GenomicRanges GRangesList
#' @importFrom S4Vectors metadata
#'
#' @return GRangesList containing all GMQL samples in dataset
#'
#' @name download_as_GRangesList
#' @rdname download_dataset
#' @export
#'
download_as_GRangesList <- function(url,datasetName)
{
list <- show_samples_list(url,datasetName)
samples <- list$samples
sample_list_name <- vapply(samples, function(x) x$name, character(1))
sampleList <- lapply(samples, function(x){
name <- x$name
range <- sample_region(url,datasetName,name)
})
names(sampleList) <- sample_list_name
gRange_list <- GenomicRanges::GRangesList(sampleList)
meta_list <- lapply(samples, function(x){
name <- x$name
meta <- sample_metadata(url,datasetName,name)
})
names(meta_list) <- sample_list_name
S4Vectors::metadata(gRange_list) <- meta_list
return(gRange_list)
}
#' Show metadata list from dataset sample
#'
#' It retrieves metadata of a specific sample in dataset using the proper
#' GMQL web service available on a remote server
#'
#' @import httr
#'
#' @param url string url of server: It must contain the server address
#' and base url; service name is added automatically
#' @param datasetName string name of dataset of interest
#' @param sampleName string name of sample of interest
#'
#' @return List of metadata in the form 'key = value'
#'
#' @details
#' If error occurs, a specific error is printed
#'
#' @examples
#' ## Login to GMQL REST services suite as guest
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## This statement retrieves metadata of sample 'S_00000' from public
#' ## dataset 'Example_Dataset_1'
#'
#' sample_metadata(remote_url, "public.Example_Dataset_1", "S_00000")
#'
#'
#' @name sample_metadata
#' @rdname sample_metadata
#' @export
#'
sample_metadata <- function(url, datasetName,sampleName)
{
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/datasets/",datasetName,"/",sampleName,"/metadata")
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken, 'Accpet' = 'text/plain')
req <- httr::GET(URL, httr::add_headers(h))
content <- httr::content(req, 'text',encoding = "UTF-8")
#trasform text to list
metadata <- strsplit(content, "\n")
metadata <- strsplit(unlist(metadata), "\t")
names(metadata) <- vapply(metadata, `[[`, character(1),1)
listMeta <- lapply(metadata, `[`, -1)
if(req$status_code !=200)
stop(content)
else
return(listMeta)
}
#' Show regions data from a dataset sample
#'
#' It retrieves regions data of a specific sample (whose name is specified in
#' the parameter "sampleName") in a specific dataset (whose name is specified
#' in the parameter "datasetName") using the proper GMQL web service
#' available on a remote server
#'
#' @import httr
#' @importFrom rtracklayer import
#' @importFrom data.table fread
#' @importFrom GenomicRanges makeGRangesFromDataFrame
#' @importFrom utils write.table
#'
#' @param url string url of server. It must contain the server address
#' and base url; service name is added automatically
#' @param datasetName string name of dataset of interest
#' @param sampleName string name of sample of interest
#'
#' @return GRanges data containing regions of sample
#'
#' @details
#' If error occurs, a specific error is printed
#'
#' @examples
#'
#' \dontrun{
#'
#' ## Login to GMQL REST services suite as guest
#'
#' remote_url = "http://www.gmql.eu/gmql-rest/"
#' login_gmql(remote_url)
#'
#' ## This statement retrieves regions data of sample "S_00000" from public
#' ## dataset "Example_Dataset_1"
#'
#' sample_region(remote_url, "public.Example_Dataset_1", "S_00000")
#'
#' }
#'
#' @name sample_region
#' @rdname sample_region
#' @export
#'
sample_region <- function(url, datasetName,sampleName)
{
url <- sub("/*[/]$","",url)
URL <- paste0(url,"/datasets/",datasetName,"/",sampleName,"/region")
authToken = GMQL_credentials$authToken
h <- c('X-Auth-Token' = authToken, 'Accpet' = 'text/plain')
req <- httr::GET(URL, httr::add_headers(h))
content <- httr::content(req, 'parsed',encoding = "UTF-8")
if(req$status_code !=200)
stop(content)
else
{
list <- show_schema(url,datasetName)
schema_type <- list$type
#df <- read.table(textConnection(content),sep = "\t")
temp <- tempfile("temp") #use temporary files
write.table(content,temp,quote = FALSE,sep = '\t',col.names = FALSE,
row.names = FALSE)
if(identical(schema_type, "gtf"))
samples <- rtracklayer::import(temp,format = "gtf")
else
{
vector_field <- vapply(list$fields,function(x)x$name,character(1))
df <- data.table::fread(temp,header = FALSE,sep = "\t")
a <- df[1,2]
if(is.na(as.numeric(a)))
df <- df[-1]
data.table::setnames(df,vector_field)
samples <- GenomicRanges::makeGRangesFromDataFrame(df,
keep.extra.columns = TRUE,
start.field = "left",
end.field = "right",
strand.field="strand")
}
unlink(temp)
return(samples)
}
}
#############################
# WEB UTILS #
############################
# no export
serialize_query <- function(url,output_gtf,base64)
{
if(output_gtf)
out <- "gtf"
else
out <- "tab"
req <- httr::GET(url)
real_URL <- req$url
authToken = GMQL_credentials$authToken
URL <- paste0(real_URL,"queries/dag/",out)
h <- c('Accept' = "Application/json",
'Content-Type' = 'text/plain','X-Auth-Token' = authToken)
req <- httr::POST(URL,body = base64 ,httr::add_headers(h),encode = "json")
content <- httr::content(req,"parsed")
if(req$status_code !=200)
stop(content$error)
else
return(content)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.