Skip to content
Snippets Groups Projects
Commit bc2c039c authored by ronan.vignard's avatar ronan.vignard
Browse files

Ajout des tests pour import_xlsx() + correctif pour format_colnames() + divers

parent 45fb258d
No related branches found
No related tags found
1 merge request!61Ajout des tests pour import_xlsx() + correctif pour format_colnames() + divers
......@@ -82,6 +82,9 @@ archive_table <- function(host, database, schema, new_schema = NULL, table, role
db_dest = database,
user = role)
# Fermer la connexion à la base de données
DBI::dbDisconnect(connexion)
# Retourner le nom de la nouvelle table archivée
return(new_table)
}
......@@ -72,5 +72,9 @@ check_structure_table <- function(host, database, schema, table, dataframe, role
return(FALSE)
}
# Fermer la connexion à la base de données
DBI::dbDisconnect(connexion)
# Retourner TRUE si les attributs correspondent
return(TRUE)
}
#' Télécharge et extrait un fichier compressé à partir de l'URL d'un flux WFS
#' Télécharge et extrait un fichier compressé à partir de l'URL d'un flux WFS
#' (Web Feature Service)
#'
#' @description Cette fonction télécharge un fichier zippé à partir de l'URL
#' d'un flux WFS (Web Feature Service), le décompresse dans un dossier
#' temporaire et renvoie le chemin vers le fichier extrait avec l'extension
#' @description Cette fonction télécharge un fichier zippé à partir de l'URL
#' d'un flux WFS (Web Feature Service), le décompresse dans un dossier
#' temporaire et renvoie le chemin vers le fichier extrait avec l'extension
#' spécifiée.
#'
#' @param url L'URL du fichier compressé à télécharger.
#' @param file_extension L'extension du fichier à extraire du fichier compressé
#' @param file_extension L'extension du fichier à extraire du fichier compressé
#' (par exemple, "shp", "gpkg", "csv", etc.).
#' @return Le chemin vers le fichier extrait avec l'extension spécifiée.
#' @importFrom utils download.file unzip
#'
#'
#' @export
#' @examples
#' \dontrun{
......@@ -22,7 +22,7 @@
#' "SERVICE=WFS&",
#' "VERSION=2.0.0&",
#' "REQUEST=GetFeature&",
#' "typename=BassinDCE&",
#' "typename=ObstEcoul_GUF&",
#' "SRSNAME=EPSG:4326&",
#' "OUTPUTFORMAT=SHAPEZIP"
#' )
......@@ -44,11 +44,11 @@ download_and_extract_wfs <- function(url, file_extension) {
# Trouver le chemin vers le fichier extrait avec l'extension spécifiée
extracted_files <- list.files(temp_dir, full.names = TRUE, recursive = TRUE)
file_path <- extracted_files[grep(paste0("\\.", file_extension, "$"), extracted_files)]
# Vérifier si le fichier a été trouvé
if (length(file_path) == 0) {
stop(paste("Le fichier avec l\'extension", file_extension, "n\'a pas \u00e9t\u00e9 trouv\u00e9 dans le dossier temporaire."))
}
return(file_path)
}
#' Formate les noms des colonnes
#'
#' @description Cette fonction formate les noms des colonnes d'un dataframe en
#' remplaçant les caractères spéciaux par des chaînes vides, en mettant les noms
#' en minuscules et en ajoutant des underscores avant les majuscules
#' @description Cette fonction formate les noms des colonnes d'un dataframe en
#' remplaçant les caractères spéciaux par des chaînes vides, en mettant les noms
#' en minuscules et en ajoutant des underscores avant les majuscules
#' (sauf au début du nom).
#'
#' @param colnames Vecteur contenant les noms des colonnes à formater.
......@@ -23,8 +23,14 @@ format_colnames <- function(colnames) {
# Ajouter des underscores avant les majuscules (sauf au début du nom)
colnames <- gsub("([[:lower:]]|\\s)([[:upper:]])", "\\1_\\2", colnames)
# Remplacer les caractères spéciaux et mettre en minuscules
colnames <- gsub("[^[:alnum:]_]", "", tolower(colnames))
# Remplacer les accents par leurs équivalents sans accent
colnames <- iconv(colnames, from = "UTF-8", to = "ASCII//TRANSLIT")
# Remplacer les caractères spéciaux (hors underscores et alphanumériques)
colnames <- gsub("[^[:alnum:]_]", "", colnames)
# Mettre en minuscules
colnames <- tolower(colnames)
return(colnames)
}
#' Importe un fichier XLSX dans un dataframe
#'
#' @description Cette fonction importe un fichier au format XLSX dans un
#' @description Cette fonction importe un fichier au format XLSX dans un
#' dataframe en supprimant les caractères spéciaux des noms de colonnes.
#'
#' @return Un dataframe correspondant au contenu du fichier.
......@@ -9,14 +9,13 @@
#' @param sheet Numéro de l'onglet à importer.
#' @param row Numéro de la ligne de début de lecture.
#' @importFrom readxl read_xlsx
#'
#'
#' @export
#' @examples
#' # Utilisation de la fonction import_xlsx()
#' data_ars_2022 <- import_xlsx(
#' filepath = "C:\\TEMP\\Nitrates_2022.xlsx",
#' sheet = 1,
#' row = 1)
#' plans_eau_usage <- import_xlsx(system.file("plans_eau_usage.xlsx",
#' package = "collectr"),
#' sheet = 1, row = 0)
#'
import_xlsx <- function(filepath, sheet, row) {
......@@ -30,8 +29,8 @@ import_xlsx <- function(filepath, sheet, row) {
# Déclarer la première ligne comme nom de variable
col_names = TRUE
)
colnames(data) <- collectr::remove_special_chars(colnames(data))
colnames(data) <- collectr::format_colnames(colnames(data))
return(data)
}
......@@ -35,11 +35,15 @@ table_exists <- function(host, database, schema, table, role) {
stop("La connexion fournie n\'est pas une connexion PostgreSQL valide.")
}
# Lister les tables du schéma spécifié
tables <- datalibaba::list_tables(connexion, schema = schema, db = database)
# Vérifier la présence de la table spécifiée parmi celles du schéma
table_exists <- table %in% tables
# Fermer la connexion à la base de données
DBI::dbDisconnect(connexion)
# Retourner TRUE si la table existe
return(table_exists)
}
......@@ -84,6 +84,7 @@ usethis::use_r("format_filepath")
usethis::use_r("get_variable_completion_rate")
usethis::use_r("import_geopackage")
usethis::use_r("import_shapefile")
usethis::use_r("import_xlsx")
usethis::use_r("modify_column_type")
usethis::use_r("remove_special_chars")
usethis::use_r("rename_field")
......@@ -104,6 +105,7 @@ usethis::use_test("format_filepath")
usethis::use_test("get_variable_completion_rate")
usethis::use_test("import_geopackage")
usethis::use_test("import_shapefile")
usethis::use_test("import_xlsx")
usethis::use_test("modify_column_type")
usethis::use_test("remove_special_chars")
usethis::use_test("rename_field")
......@@ -116,18 +118,21 @@ usethis::use_test("table_exists")
```{r}
# Simulate package installation
pkgload::load_all()
```
```{r}
# Generate documentation and deal with dependencies
attachment::att_amend_desc()
```
```{r}
# Add variables in globals.R
checkhelper::print_globals()
```
```{r}
# Check the package
devtools::check()
# Manually add dependances
usethis::use_package("mockery")
```
# Share the package
......
File added
......@@ -30,7 +30,7 @@ url_wfs <- paste0(
"SERVICE=WFS&",
"VERSION=2.0.0&",
"REQUEST=GetFeature&",
"typename=BassinDCE&",
"typename=ObstEcoul_GUF&",
"SRSNAME=EPSG:4326&",
"OUTPUTFORMAT=SHAPEZIP"
)
......
......@@ -24,6 +24,6 @@ si elle existe.
\examples{
\dontrun{
# Importer le fichier shapefile dans un dataframe
chef_lieu <- import_shapefile(system.file("CHFLIEU_COMMUNE_ASSOCIEE_OU_DELEGUEE.shp", package = "collectr"),2154)
gare <- import_shapefile(system.file("GARE.shp", package = "collectr"),2154)
}
}
......@@ -22,9 +22,8 @@ dataframe en supprimant les caractères spéciaux des noms de colonnes.
}
\examples{
# Utilisation de la fonction import_xlsx()
data_ars_2022 <- import_xlsx(
filepath = "C:\\\\TEMP\\\\Nitrates_2022.xlsx",
sheet = 1,
row = 1)
plans_eau_usage <- import_xlsx(system.file("plans_eau_usage.xlsx",
package = "collectr"),
sheet = 1, row = 0)
}
test_that("import_xlsx works", {
result <- import_xlsx(system.file("plans_eau_usage.xlsx",
package = "collectr"),
sheet = 1, row = 0)
# Vérifier que la sortie est un dataframe
expect_s3_class(result, "data.frame")
# Vérifier le nombre de lignes
expect_equal(nrow(result), 13)
# Vérifier le nombre de colonnes
expect_equal(ncol(result), 3)
# Vérifier qu'il n'y a plus de caractères spéciaux
expect_true(!any(grepl("[^A-Za-z0-9_]", colnames(result))))
})
......@@ -32,7 +32,7 @@ url_wfs <- paste0(
"SERVICE=WFS&",
"VERSION=2.0.0&",
"REQUEST=GetFeature&",
"typename=BassinDCE&",
"typename=ObstEcoul_GUF&",
"SRSNAME=EPSG:4326&",
"OUTPUTFORMAT=SHAPEZIP"
)
......@@ -46,7 +46,7 @@ shapefile_path <- download_and_extract_wfs(url_wfs, "shp")
```{r examples-import_geopackage, eval=FALSE}
#' \dontrun{
# Utilisation de la fonction import_geopackage()
# Importer le fichier GeoPackage dans un dataframe
aerodrome <- import_geopackage(system.file("aerodrome.gpkg", package = "collectr"))
#' }
```
......@@ -55,7 +55,7 @@ aerodrome <- import_geopackage(system.file("aerodrome.gpkg", package = "collectr
```{r examples-import_shp, eval=FALSE}
#' \dontrun{
# Importer le fichier shapefile dans un dataframe
# Importer le fichier Shapefile dans un dataframe
gare <- import_shapefile(system.file("GARE.shp", package = "collectr"),2154)
#' }
```
......@@ -65,12 +65,12 @@ gare <- import_shapefile(system.file("GARE.shp", package = "collectr"),2154)
## Import de données au format XLSX
```{r examples-import_xlsx, eval=FALSE}
# Utilisation de la fonction import_xlsx()
data_ars_2022 <- import_xlsx(
filepath = "C:\\TEMP\\Nitrates_2022.xlsx",
sheet = 1,
row = 1)
#' \dontrun{
# Importer le fichier XLSX dans un dataframe
plans_eau_usage <- import_xlsx(system.file("plans_eau_usage.xlsx",
package = "collectr"),
sheet = 1, row = 0)
#' }
```
## Import de données au format XLS
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment