Skip to content
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

read/write dm as csv/zip(csv)/xlsx #485

Closed
wants to merge 63 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
d118434
dm_write_zip() and dm_read_zip()
TSchiefer Mar 1, 2021
8929c18
functions 'dm_write_csv()' and 'dm_read_csv()'
TSchiefer Mar 2, 2021
4190a51
tweaks
TSchiefer Mar 2, 2021
0a4a35a
errors and fixmes
TSchiefer Mar 2, 2021
473db9f
abort with correct error but also remove directory in case of error
TSchiefer Mar 2, 2021
c5b8334
rename write.R -> read-write.R
TSchiefer Mar 3, 2021
32b7499
can also chose an empty directory for csv-files
TSchiefer Mar 3, 2021
42a5b94
tweak
TSchiefer Mar 3, 2021
89cc58a
tests for csv- and zip-read/write
TSchiefer Mar 3, 2021
ca7ce34
tweaks, edge cases, errors
TSchiefer Mar 3, 2021
a359c51
move functions to be exported
TSchiefer Mar 3, 2021
6860108
move prepare tables
TSchiefer Mar 3, 2021
53aa929
dm_read_xlsx(), tweaks, tests and errors
TSchiefer Mar 3, 2021
ac8a1e8
new suggestions
TSchiefer Mar 3, 2021
8144ef0
oops
TSchiefer Mar 3, 2021
eb498fa
document
TSchiefer Mar 3, 2021
a82c702
add global variables
TSchiefer Mar 3, 2021
239a807
update _pkgdown.yml
TSchiefer Mar 3, 2021
eda3b39
don't run examples
TSchiefer Mar 3, 2021
33f7df7
review comments: write_*() returns dm invisibly
TSchiefer Mar 4, 2021
61a15c8
simpler
TSchiefer Mar 4, 2021
7f5d732
review comments: rename prepare_tables -> prepare_tbls_for_def_and_class
TSchiefer Mar 4, 2021
0a4bb58
review comment: removing default zip- and xlsx-paths
TSchiefer Mar 4, 2021
67f7b9d
distinguish between supported for xlsx and csv
TSchiefer Mar 4, 2021
94642c5
tweak tests
TSchiefer Mar 4, 2021
df95e76
typo
TSchiefer Mar 4, 2021
bc11799
review comment: convert all times to tzone 'UTC'
TSchiefer Mar 4, 2021
caadef4
tweak
TSchiefer Mar 4, 2021
fd5d9a8
test error dispatch
TSchiefer Mar 4, 2021
0e21b48
document supported column types and time conversion to UTC
TSchiefer Mar 4, 2021
a1d2b66
also test for logical column type
TSchiefer Mar 4, 2021
c7cf6cb
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
678c956
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
05cd2e2
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
c795656
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
637525f
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
b2810fd
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
fd62c1c
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
e691d81
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
3488cb2
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
e7d36d8
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
a70a586
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
10f7087
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
b1ad850
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
274d7f5
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
c602e39
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
51859b9
Merge branch 'main' (early part) into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
4e97b3c
Merge branch 'main' into f-276-dm-to-csv-or-xlsx-locally
krlmlr Jul 5, 2021
d292f9d
Style
krlmlr Jul 5, 2021
a665917
Avoid partial argument matching
krlmlr Jul 5, 2021
c85b7c0
abort() -> stop() (review suggestion)
TSchiefer Jul 19, 2021
88847f5
Merge branch 'main' into f-276-dm-to-csv-or-xlsx-locally
TSchiefer Jul 19, 2021
58cbe3f
no hyphen for file types (review suggestion)
TSchiefer Jul 19, 2021
622dbdd
add missing parentheses (review suggestion)
TSchiefer Jul 19, 2021
de4a607
new error for remote dm-con
TSchiefer Jul 20, 2021
d3481d8
do not use column 'segment'
TSchiefer Jul 20, 2021
78dd5ef
test error dispatch on DB
TSchiefer Jul 20, 2021
25e7a76
error in case a table is missing
TSchiefer Jul 20, 2021
c6832c1
adapt for compound key support
TSchiefer Jul 20, 2021
c1c821a
avoid deprecation warnings
TSchiefer Jul 20, 2021
7237804
maybe avoids note
TSchiefer Jul 20, 2021
9918b0c
avoid R CMD Check problems
TSchiefer Jul 20, 2021
65e46fd
Merge branch 'main' into f-276-dm-to-csv-or-xlsx-locally
krlmlr Oct 12, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 5 additions & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -69,17 +69,21 @@ Suggests:
fansi,
keyring,
knitr,
lubridate,
mockr,
nycflights13,
odbc,
progress,
readr,
readxl,
RMariaDB (>= 1.0.10),
rmarkdown,
RPostgres,
RSQLite (>= 2.2.8),
testthat (>= 3.0.2),
tidyverse,
withr
withr,
writexl
VignetteBuilder:
knitr
Encoding: UTF-8
Expand Down
6 changes: 6 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,9 @@ export(dm_nrow)
export(dm_nycflights13)
export(dm_paste)
export(dm_ptype)
export(dm_read_csv)
export(dm_read_xlsx)
export(dm_read_zip)
export(dm_rename)
export(dm_rename_tbl)
export(dm_rm_fk)
Expand All @@ -269,6 +272,9 @@ export(dm_select_tbl)
export(dm_set_colors)
export(dm_squash_to_tbl)
export(dm_update_zoomed)
export(dm_write_csv)
export(dm_write_xlsx)
export(dm_write_zip)
export(dm_zoom_to)
export(enum_fk_candidates)
export(enum_pk_candidates)
Expand Down
86 changes: 85 additions & 1 deletion R/error-helpers.R
Original file line number Diff line number Diff line change
Expand Up @@ -450,8 +450,10 @@ error_txt_pk_not_tracked <- function(orig_table, orig_pk) {
}


# only for local src ------------------------------------------------------
# only for local src or con------------------------------------------------------

# FIXME: since we don't work with sources, this error needs to be revisited
# also: `nest_join.zoomed_dm()` currently not implemented anyway ;)
abort_only_for_local_src <- function(src_dm) {
abort(error_txt_only_for_local_src(format_classes(class(src_dm))), .subclass = dm_error_full("only_for_local_src"))
}
Expand All @@ -460,6 +462,15 @@ error_txt_only_for_local_src <- function(src_class) {
glue("`nest_join.zoomed_dm()` works only for a local `src`, not on a database with `src`-class: {src_class}.")
}

abort_only_for_local_con <- function(con_dm) {
abort(error_txt_only_for_local_con(format_classes(class(con_dm))), .subclass = dm_error_full("only_for_local_con"))
}

error_txt_only_for_local_con <- function(con_class) {
glue("This operation works only locally, not on a database with `con`-class: {con_class}.")
}


# Errors for `pull_tbl.dm()` -----------------------------

abort_no_table_provided <- function() {
Expand Down Expand Up @@ -646,3 +657,76 @@ abort_one_of_schema_table_names <- function() {
.subclass = dm_error_full("one_of_schema_table_names")
)
}


# write or read dm to/from files ------------------------------------------

abort_dir_not_empty <- function() {
abort(
"Please choose a non-existent or empty directory for the csv files.",
.subclass = dm_error_full("dir_not_empty")
)
}

abort_file_exists <- function(zip_file_path) {
abort(
glue::glue("File {tick(zip_file_path)} exists and `overwrite = FALSE`."),
.subclass = dm_error_full("file_exists")
)
}

abort_no_list <- function(table_names, column_names) {
abort(
error_txt_no_list(table_names, column_names),
.subclass = dm_error_full("no_list")
)
}

error_txt_no_list <- function(table_names, column_names) {
glue::glue(
"Class `list` is not supported, problematic column(s):\n",
"{paste0(table_names, '$', column_names, collapse = '\n')}"
)
}

abort_empty_dm <- function() {
abort(
"There needs to be at least one table in the `dm`, aborting the operation.",
.subclass = dm_error_full("empty_dm")
)
}

abort_files_or_sheets_missing <- function(missing, path, csv = TRUE) {
abort(
error_txt_files_or_sheets_missing(missing, path, csv),
.subclass = dm_error_full("files_or_sheets_missing")
)
}

error_txt_files_or_sheets_missing <- function(missing, path, csv) {
if (csv) {
glue::glue(
"Cannot recreate `dm`: At least the files {commas(tick(missing))} are missing in directory {tick(path)}."
)
} else {
glue::glue(
"Cannot recreate `dm`: At least the worksheets {commas(tick(missing))} are missing in file {tick(path)}."
)
}
}

abort_class_not_supported <- function(unsupported_class) {
abort(
error_txt_class_not_supported(unsupported_class),
.subclass = dm_error_full("class_not_supported")
)
}

error_txt_class_not_supported <- function(unsupported_class) {
c(glue::glue(
"R-class(es) {commas(tick(unsupported_class))} not supported. Please consider one of:"
),
"converting the respective columns to a supported class (see `?dm_read_csv()`)",
"filing an issue and/or PR at https://github.com/krlmlr/dm"
)
}
4 changes: 2 additions & 2 deletions R/filter-dm.R
Original file line number Diff line number Diff line change
Expand Up @@ -255,14 +255,14 @@ new_filtered_edges <- function(node, parent = node, distance = 0) {
tibble(node, parent, distance)
}

check_no_filter <- function(dm) {
check_no_filter <- function(dm, levels_up = -1) {
def <-
dm_get_def(dm)

if (detect_index(def$filters, ~ vec_size(.) > 0) == 0) {
return()
}

fun_name <- as_string(sys.call(-1)[[1]])
fun_name <- as_string(sys.call(levels_up)[[1]])
abort_only_possible_wo_filters(fun_name)
}
10 changes: 9 additions & 1 deletion R/global.R
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ utils::globalVariables(c(
"unique_indexes",
"value",
"values",
"where",
"why",
"zoom",
"zoomed",
Expand All @@ -96,5 +97,12 @@ utils::globalVariables(c(
"districts",
"loans",
"orders",
"trans"
"trans",
#
# read/write
"readr_class",
"zip",
"key_nr",
"fk_col",
"segment"
))